initial commit

This commit is contained in:
Moon Man 2024-01-21 09:00:46 -05:00
commit 5cfb5cb240
4 changed files with 164 additions and 0 deletions

4
.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
.env
public_html
*.swp

10
README.md Normal file
View File

@ -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.

9
env.example Normal file
View File

@ -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/"

141
publish.sh Executable file
View File

@ -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//</&lt;}
s=${s//>/&gt;}
s=${s//'"'/&quot;}
printf -- %s "$s"
}
function generate_xml() {
# .whatever
EXT="$1"
cat << EOF
<?xml version="1.0" ?>
<rss version="2.0">
<channel>
<title>${PODCAST_NAME}</title>
<link>${PODCAST_WEBROOT}</link>
<description>${PODCAST_DESCRIPTION}</description>
<image>
<url>${PODCAST_WEBROOT}${IMAGE}</url>
</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
<item>
<title>${TITLE}</title>
<link>${FILE_URL}</link>
<description>${DESCRIPTION}</description>
<pubDate>${PUB_DATE}</pubDate>
</item>
EOF
done
echo "</channel></rss>"
}
function generate_html() {
ESCAPED_PODCAST_NAME=$(escape "${PODCAST_NAME}")
ESCAPED_PODCAST_DESCRIPTION=$(escape "${PODCAST_DESCRIPTION}")
cat << EOF
<!DOCTYPE html>
<html>
<head>
<title>${ESCAPED_PODCAST_NAME}</title>
<link rel="alternate" type="application/rss+xml" title="Audio Podcast" href="/mp3.rss.xml"/>
<link rel="alternate" type="application/rss+xml" title="Video Podcast" href="/mp4.rss.xml"/>
</head>
<body>
<h1>${ESCAPED_PODCAST_NAME}</h1>
<p>
${ESCAPED_PODCAST_DESCRIPTION}
</p>
<ul>
<li><a href="/mp3.rss.xml">Direct link to audio podcast feed</a></li>
<li><a href="/mp4.rss.xml">Direct link to video podcast feed</a></li>
</ul>
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
<h2>${TITLE}</h2>
<div class="rss-item">
<p class="item-description">${DESCRIPTION}</p>
<ul class="item-files">
<li>
<a href="/${MP3_FILE}" target="_blank">Audio</a>
</li>
<li>
<a href="/${MP4_FILE}" target="_blank">Video</a>
</li>
</ul>
</div>
EOF
done
echo "</body></html>"
}
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"