initial commit
This commit is contained in:
commit
5cfb5cb240
|
@ -0,0 +1,4 @@
|
||||||
|
.env
|
||||||
|
public_html
|
||||||
|
*.swp
|
||||||
|
|
|
@ -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.
|
|
@ -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/"
|
|
@ -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//>/>}
|
||||||
|
s=${s//'"'/"}
|
||||||
|
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"
|
Loading…
Reference in New Issue