iFix title and image viewing duration, create fallback stream - bitreich-memestats - Bitreich meme statistics and graphs. Err bitreich.org 70
hgit clone git://bitreich.org/bitreich-memestats git://hg6vgqziawt5s4dj.onion/bitreich-memestats URL:git://bitreich.org/bitreich-memestats git://hg6vgqziawt5s4dj.onion/bitreich-memestats bitreich.org 70
1Log /scm/bitreich-memestats/log.gph bitreich.org 70
1Files /scm/bitreich-memestats/files.gph bitreich.org 70
1Refs /scm/bitreich-memestats/refs.gph bitreich.org 70
1Tags /scm/bitreich-memestats/tag bitreich.org 70
1LICENSE /scm/bitreich-memestats/file/LICENSE.gph bitreich.org 70
i--- Err bitreich.org 70
1commit 3c3d3a067be47f9db268d4817d937a49ecf5f051 /scm/bitreich-memestats/commit/3c3d3a067be47f9db268d4817d937a49ecf5f051.gph bitreich.org 70
1parent 9a39dea48b13099733de2f6ff98de64901702b09 /scm/bitreich-memestats/commit/9a39dea48b13099733de2f6ff98de64901702b09.gph bitreich.org 70
hAuthor: Anders Damsgaard <anders@adamsgaard.dk> URL:mailto:anders@adamsgaard.dk bitreich.org 70
iDate: Thu, 11 Jun 2020 13:42:37 +0000 Err bitreich.org 70
i Err bitreich.org 70
iFix title and image viewing duration, create fallback stream Err bitreich.org 70
i Err bitreich.org 70
iDiffstat: Err bitreich.org 70
i M brtv-start.sh | 100 ++++++++++++++++++------------- Err bitreich.org 70
i Err bitreich.org 70
i1 file changed, 57 insertions(+), 43 deletions(-) Err bitreich.org 70
i--- Err bitreich.org 70
1diff --git a/brtv-start.sh b/brtv-start.sh /scm/bitreich-memestats/file/brtv-start.sh.gph bitreich.org 70
i@@ -1,6 +1,5 @@ Err bitreich.org 70
i #!/bin/sh Err bitreich.org 70
i-# start streaming server, but beforehand reencode memecache and Err bitreich.org 70
i-# generate title animations if necessary Err bitreich.org 70
i+# generate title animations and start streaming server Err bitreich.org 70
i Err bitreich.org 70
i if [ $# -ne 1 ]; then Err bitreich.org 70
i printf 'usage: %s <memecache_path>\n' "$0" >&2 Err bitreich.org 70
i@@ -9,24 +8,23 @@ fi Err bitreich.org 70
i Err bitreich.org 70
i ### CONFIGURATION START Err bitreich.org 70
i Err bitreich.org 70
i-# mkv streaming server executable Err bitreich.org 70
i-# git://github.com/klaxa/mkvserver_mk2 Err bitreich.org 70
i-bin=mkvserver_mk2 Err bitreich.org 70
i+# streaming server executable Err bitreich.org 70
i+#bin=vlc Err bitreich.org 70
i+ Err bitreich.org 70
i+# intermediate playlist file Err bitreich.org 70
i+playlist="playlist" Err bitreich.org 70
i Err bitreich.org 70
i # memecache source dir Err bitreich.org 70
i memecache="$1" Err bitreich.org 70
i Err bitreich.org 70
i # converted memecache dir Err bitreich.org 70
i-memecache_conv=memecache Err bitreich.org 70
i+memecache_conv="memecache" Err bitreich.org 70
i Err bitreich.org 70
i # title animations dir Err bitreich.org 70
i title="title" Err bitreich.org 70
i Err bitreich.org 70
i-# desired ffmpeg codec flags Err bitreich.org 70
i-ffmpeg_codec="-c:v libx264 -c:a libvorbis -f matroska" Err bitreich.org 70
i- Err bitreich.org 70
i-# port for streaming socket (combined stream hosted on port 8080) Err bitreich.org 70
i-commport=12345 Err bitreich.org 70
i+# ffmpeg codec flags for generated animations Err bitreich.org 70
i+ffmpeg_codec="-acodec libopus -b:a 96K -vcodec libvpx -f webm -vf scale=1280:-1 -r 30 -ac 2" Err bitreich.org 70
i Err bitreich.org 70
i # target video resolution Err bitreich.org 70
i video_resolution=1280x720 Err bitreich.org 70
i@@ -35,11 +33,11 @@ video_resolution=1280x720 Err bitreich.org 70
i bgcolor=magenta Err bitreich.org 70
i fcolor=white Err bitreich.org 70
i Err bitreich.org 70
i-# show image memes for this duration [s] Err bitreich.org 70
i+# show image memes for this duration, must be two digits [s] Err bitreich.org 70
i image_display_time=10 Err bitreich.org 70
i Err bitreich.org 70
i-# show title slides for this duration [s] Err bitreich.org 70
i-title_display_time=5 Err bitreich.org 70
i+# show title slides for this duration, must be two digits [s] Err bitreich.org 70
i+title_display_time=05 Err bitreich.org 70
i Err bitreich.org 70
i ### CONFIGURATION END Err bitreich.org 70
i Err bitreich.org 70
i@@ -54,73 +52,89 @@ video_from_img() { Err bitreich.org 70
i -f lavfi \ Err bitreich.org 70
i -i anullsrc=r=48000 \ Err bitreich.org 70
i -i "$1" \ Err bitreich.org 70
i- -t "00:${3}:00" \ Err bitreich.org 70
i+ -t "00:00:${image_display_time}" \ Err bitreich.org 70
i $ffmpeg_codec \ Err bitreich.org 70
i "$2"; Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i title_slide() { Err bitreich.org 70
i img="$(basename "${1%.*}".png)" Err bitreich.org 70
i- convert -size "$video_resolution" "xc:${bgcolor}" -pointsize 48 -fill "$fgcolor" \ Err bitreich.org 70
i+ convert -size "$video_resolution" "xc:${bgcolor}" \ Err bitreich.org 70
i+ -pointsize 48 -fill "$fgcolor" \ Err bitreich.org 70
i -gravity center -draw "text 0,0 '#${img%.*}'" "$img" Err bitreich.org 70
i ffmpeg -y \ Err bitreich.org 70
i -f lavfi \ Err bitreich.org 70
i -i anullsrc=r=48000 \ Err bitreich.org 70
i -i "$img" \ Err bitreich.org 70
i- -t "00:${title_display_time}:00" \ Err bitreich.org 70
i+ -t "00:00:${title_display_time}" \ Err bitreich.org 70
i $ffmpec_codec \ Err bitreich.org 70
i- "$2"; Err bitreich.org 70
i+ "$2" && rm "$img" Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i video_conv() { Err bitreich.org 70
i- ffmpeg -y -i "$1" $ffmpeg_codec "$2" Err bitreich.org 70
i+ ffmpeg -y -i "$1" $ffmpeg_codec -max_muxing_queue_size 1024 "$2" Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i- Err bitreich.org 70
i mkdir -p "$title" Err bitreich.org 70
i mkdir -p "$memecache_conv" Err bitreich.org 70
i Err bitreich.org 70
i # generate video from each image Err bitreich.org 70
i-for f in "$memecache"/*.jpg "$memecache"/*.png "$memecache"/*.JPG; do Err bitreich.org 70
i- out="${memecache_conv}/$(basename "${f%.*}.mkv")" Err bitreich.org 70
i- if [ ! -e "$out" ]; then Err bitreich.org 70
i+for f in "$memecache"/*.jpg "$memecache"/*.JPG "$memecache"/*.png "$memecache"/*.PNG; do Err bitreich.org 70
i+ out="${memecache_conv}/$(basename "${f%.*}.webm")" Err bitreich.org 70
i+ if [ -e "$f" ] && [ ! -e "$out" ]; then Err bitreich.org 70
i+ printf 'in: %s, out: %s\n' "$f" "$out" Err bitreich.org 70
i fit_img_16_9 "$f" "${out%.*}.jpg" Err bitreich.org 70
i- video_from_img "${out%.mkv}.jpg" "${out}" "${image_display_time}" Err bitreich.org 70
i+ video_from_img "${out%.webm}.jpg" "${out}" Err bitreich.org 70
i fi Err bitreich.org 70
i done Err bitreich.org 70
i Err bitreich.org 70
i+# make animation for fallback stream Err bitreich.org 70
i+if [ ! -f bitreich-tv.webm ]; then Err bitreich.org 70
i+ title_slide bitreich-tv bitreich-tv.webm Err bitreich.org 70
i+fi Err bitreich.org 70
i+ Err bitreich.org 70
i+ Err bitreich.org 70
i # make title slides for video and converted images and encode to common codec Err bitreich.org 70
i for f in "$memecache"/*.mkv \ Err bitreich.org 70
i "$memecache"/*.mp4 \ Err bitreich.org 70
i "$memecache"/*.webm \ Err bitreich.org 70
i- "$memecache_conv"/*.mkv; do Err bitreich.org 70
i+ "$memecache_conv"/*.webm; do Err bitreich.org 70
i Err bitreich.org 70
i- title_path="${title}/$(basename "${f%.*}.mkv")" Err bitreich.org 70
i- [ ! -e "${title_path}" ] && title_slide "$f" "$title_path" Err bitreich.org 70
i+ title_path="${title}/$(basename "${f%.*}.webm")" Err bitreich.org 70
i+ [ ! -e "$title_path" ] && title_slide "$f" "$title_path" Err bitreich.org 70
i Err bitreich.org 70
i- out="${memecache_conv}/$(basename "${f%.*}.mkv")" Err bitreich.org 70
i- [ ! -e "${out}" ] && video_conv "$f" "$out" Err bitreich.org 70
i+ out="${memecache_conv}/$(basename "${f%.*}.webm")" Err bitreich.org 70
i+ [ ! -e "$out" ] && video_conv "$f" "$out" Err bitreich.org 70
i done Err bitreich.org 70
i Err bitreich.org 70
i # generate random playlist from converted memes and add title slides Err bitreich.org 70
i-find "$memecache_conv" -maxdepth 1 -name "*.mkv" -type f | sort -R | \ Err bitreich.org 70
i- sed "s/^/file '/;s/$/'/" | \ Err bitreich.org 70
i- awk -v titledir="$title" ' Err bitreich.org 70
i+find "$memecache_conv" -maxdepth 1 -name "*.webm" -type f | \ Err bitreich.org 70
i+ sort -R | \ Err bitreich.org 70
i+ awk -v memecachedir="$memecache" -v titledir="$title" ' Err bitreich.org 70
i function add_title(s) { Err bitreich.org 70
i- sub(/\.\//, titledir"/", s); Err bitreich.org 70
i+ sub(/memecache/, "title", s); Err bitreich.org 70
i return s Err bitreich.org 70
i } Err bitreich.org 70
i {line=$0; Err bitreich.org 70
i- print add_title($line); Err bitreich.org 70
i- print $0}' > playlist Err bitreich.org 70
i+ print "file \""add_title($line)"\""; Err bitreich.org 70
i+ print "file \""$0"\""}' | sed "s/\"/'/g" > "$playlist" Err bitreich.org 70
i+ #print "file \""$0"\""}' | sed "s/\"/'/g" |grep -v title> "$playlist" Err bitreich.org 70
i+ Err bitreich.org 70
i+printf '\nstarting fallback stream\n' Err bitreich.org 70
i+ffmpeg -loglevel quiet \ Err bitreich.org 70
i+ -stream_loop -1 -i bitreich-tv.webm Err bitreich.org 70
i+ -f webm -codec copy Err bitreich.org 70
i+ icecast://source:hasselkospiserkrymmel@localhost:8000/brtvfallback Err bitreich.org 70
i+ Err bitreich.org 70
i+exit 0 Err bitreich.org 70
i Err bitreich.org 70
i-netcat -l -p "$commport" | $bin >/dev/null 2>&1 & Err bitreich.org 70
i-sleep 2 Err bitreich.org 70
i+sleep 5 Err bitreich.org 70
i Err bitreich.org 70
i-ffmpeg -f concat -safe 0 -i playlist \ Err bitreich.org 70
i- -f matroska \ Err bitreich.org 70
i- $ffmpeg_codec \ Err bitreich.org 70
i- -max_muxing_queue_size 9999 \ Err bitreich.org 70
i- tcp://localhost:$commport Err bitreich.org 70
i+printf '\nstarting stream\n' Err bitreich.org 70
i Err bitreich.org 70
i-pkill $bin Err bitreich.org 70
i+ffmpeg -f concat -safe 0 -stream_loop -1 -i "$playlist" \ Err bitreich.org 70
i+ -f webm -cluster_size_limit 2M -cluster_time_limit 5100 -content_type video/webm \ Err bitreich.org 70
i+ -analyzeduration 2M -probesize 2M \ Err bitreich.org 70
i+ -codec copy \ Err bitreich.org 70
i+ -deadline realtime -threads 8 \ Err bitreich.org 70
i+ icecast://source:hasselkospiserkrymmel@localhost:8000/brtv Err bitreich.org 70
.
Response:
text/plain