From 5cfb5cb24065e26e055dc15698e8bd8aac11ccde Mon Sep 17 00:00:00 2001 From: Moon Man Date: Sun, 21 Jan 2024 09:00:46 -0500 Subject: [PATCH] initial commit --- .gitignore | 4 ++ README.md | 10 ++++ env.example | 9 ++++ publish.sh | 141 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 164 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 env.example create mode 100755 publish.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c0b02dd --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.env +public_html +*.swp + diff --git a/README.md b/README.md new file mode 100644 index 0000000..ef845b9 --- /dev/null +++ b/README.md @@ -0,0 +1,10 @@ +# EZ RSS + +This is a script that takes an MP4 file and turns it into two RSS feeds and a +simple HTML file. + +Title and description are added to the file metadata. + +Files are in order that you ran the script. So, if you run the script on a +file more than once, it will change the publish date which may cause chaos. +This could be improved but keeping it simple for now. \ No newline at end of file diff --git a/env.example b/env.example new file mode 100644 index 0000000..0a15a73 --- /dev/null +++ b/env.example @@ -0,0 +1,9 @@ +# Copy this to ".env" and tailor it to your needs. +OUT_DIR="./public_html" +PODCAST_NAME="Trash Talk" +PODCAST_DESCRIPTION="This is a podcast about raccoons." +PODCAST_AUTHOR="Racoon" +# Put this in OUT_DIR +IMAGE="raccoon.jpeg" +# End with slash. +PODCAST_WEBROOT="https://test.example.com/" \ No newline at end of file diff --git a/publish.sh b/publish.sh new file mode 100755 index 0000000..7df49ad --- /dev/null +++ b/publish.sh @@ -0,0 +1,141 @@ +#!/bin/bash + +MP4_FILENAME="$1" +if [ "${MP4_FILENAME}" == "" ] +then + echo "MP4 filename needed for argument 1" >&2 + exit 1 +fi + +DESCRIPTION="$2" +if [ "${DESCRIPTION}" == "" ] +then + echo "Description needed for argument 2" >&2 +fi + +source .env + +function escape() { + local s + s=${1//&/&} + s=${s///>} + s=${s//'"'/"} + printf -- %s "$s" +} + +function generate_xml() { + # .whatever + EXT="$1" + + cat << EOF + + + + ${PODCAST_NAME} + ${PODCAST_WEBROOT} + ${PODCAST_DESCRIPTION} + + ${PODCAST_WEBROOT}${IMAGE} + +EOF + + ls -1t "${OUT_DIR}"/*${EXT} | while read LONG_FNAME + do + FILE=$(basename "${LONG_FNAME}" "${EXT}") + FILE_URL="${PODCAST_WEBROOT}${FILE}${EXT}" + TITLE=$(escape "$(exiftool -b -title "${LONG_FNAME}")") + DESCRIPTION=$(escape "$(exiftool -b -description "${LONG_FNAME}")") + PUB_DATE=$(LC_ALL=C date -r "${LONG_FNAME}" "+%a, %d %b %Y %H:%M:%S %z") + + cat << EOF + + ${TITLE} + ${FILE_URL} + ${DESCRIPTION} + ${PUB_DATE} + +EOF + done + + echo "" +} + +function generate_html() { + ESCAPED_PODCAST_NAME=$(escape "${PODCAST_NAME}") + ESCAPED_PODCAST_DESCRIPTION=$(escape "${PODCAST_DESCRIPTION}") + + cat << EOF + + + +${ESCAPED_PODCAST_NAME} + + + + +

${ESCAPED_PODCAST_NAME}

+

+${ESCAPED_PODCAST_DESCRIPTION} +

+ +EOF + + ls -1t "${OUT_DIR}"/*.mp4 | while read LONG_FNAME + do + MP4_FILE=$(basename "${LONG_FNAME}") + MP3_FILE=$(basename "${MP4_FILE}" .mp4).mp3 + TITLE=$(escape "$(exiftool -b -title "${LONG_FNAME}")") + DESCRIPTION=$(escape "$(exiftool -b -description "${LONG_FNAME}")") + PUB_DATE=$(LC_ALL=C date -r "${LONG_FNAME}" "+%a, %d %b %Y %H:%M:%S %z") + + cat << EOF +

${TITLE}

+
+

${DESCRIPTION}

+ +
+EOF + done + + echo "" +} + +OUT_MP4_FILENAME="${OUT_DIR}/$(basename "${MP4_FILENAME}")" +MP3_FILENAME="${OUT_DIR}/$(basename "${MP4_FILENAME}" .mp4).mp3" +EPISODE=$(basename "${MP4_FILENAME}" .mp4 | egrep -o '[[:digit:]]+' | head -n1) +EPISODE_TITLE="${PODCAST_NAME} Episode ${EPISODE}" + +echo "Copying mp4." +ffmpeg -hide_banner -loglevel error -y -i "${MP4_FILENAME}" \ + -metadata title="${EPISODE_TITLE}" \ + -metadata author="${PODCAST_AUTHOR}" \ + -metadata description="${DESCRIPTION}" \ + -c copy \ + "${OUT_MP4_FILENAME}" + +echo "Converting to mp3." +ffmpeg -hide_banner -loglevel error -y -i "${MP4_FILENAME}" \ + -metadata title="${EPISODE_TITLE}" \ + -metadata author="${PODCAST_AUTHOR}" \ + -metadata description="${DESCRIPTION}" \ + "${MP3_FILENAME}" + +echo "Generating MP3 XML feed." +generate_xml .mp3 > "${OUT_DIR}/mp3.rss.xml" + +echo "Generating MP4 XML feed." +generate_xml .mp4 > "${OUT_DIR}/mp4.rss.xml" + +echo "Generating HTML." +generate_html > "${OUT_DIR}/index.html" \ No newline at end of file