SMOLNET PORTAL home about changes
iAdd preliminary brtv main script - bitreich-tv - Meme TV encoding and streaming	Err	bitreich.org	70
hgit clone git://bitreich.org/bitreich-tv git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/bitreich-tv	URL:git://bitreich.org/bitreich-tv git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/bitreich-tv	bitreich.org	70
1Log	/scm/bitreich-tv/log.gph	bitreich.org	70
1Files	/scm/bitreich-tv/files.gph	bitreich.org	70
1Refs	/scm/bitreich-tv/refs.gph	bitreich.org	70
1Tags	/scm/bitreich-tv/tag	bitreich.org	70
1LICENSE	/scm/bitreich-tv/file/LICENSE.gph	bitreich.org	70
i---	Err	bitreich.org	70
1commit 3a8559a5c96734befbfdb580c7e8a2ab491ea6d4	/scm/bitreich-tv/commit/3a8559a5c96734befbfdb580c7e8a2ab491ea6d4.gph	bitreich.org	70
hAuthor: Anders Damsgaard <anders@adamsgaard.dk>	URL:mailto:anders@adamsgaard.dk	bitreich.org	70
iDate:   Tue, 11 Aug 2020 17:29:44 +0200	Err	bitreich.org	70
i	Err	bitreich.org	70
iAdd preliminary brtv main script	Err	bitreich.org	70
i	Err	bitreich.org	70
iDiffstat:	Err	bitreich.org	70
i  A brtv-start.sh                       |     151 +++++++++++++++++++++++++++++++	Err	bitreich.org	70
i	Err	bitreich.org	70
i1 file changed, 151 insertions(+), 0 deletions(-)	Err	bitreich.org	70
i---	Err	bitreich.org	70
1diff --git a/brtv-start.sh b/brtv-start.sh	/scm/bitreich-tv/file/brtv-start.sh.gph	bitreich.org	70
i@@ -0,0 +1,151 @@	Err	bitreich.org	70
i+#!/bin/sh	Err	bitreich.org	70
i+# generate title animations and start streaming server	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+pass="$(gpg2 -q -d icecastpass.gpg)"	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+        exit	Err	bitreich.org	70
i+fi	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+### CONFIGURATION START	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+# intermediate playlist file	Err	bitreich.org	70
i+playlist="playlist_$(date +%Y-%m-%d)"	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_conv"	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+# ffmpeg flags for generated videos	Err	bitreich.org	70
i+video_ext="webm"	Err	bitreich.org	70
i+ffmpeg_codec="-loglevel error -acodec libopus -b:a 96K -vcodec libvpx -b:v 64k -f webm -vf scale=1280:-1 -r 30 -ac 2"	Err	bitreich.org	70
i+out_video="brtv_$(date +%Y-%m-%d).${video_ext}"	Err	bitreich.org	70
i+#out_video_duration="24:00:00"	Err	bitreich.org	70
i+out_video_duration="00:05:00"	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+	Err	bitreich.org	70
i+# slide style	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+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+	Err	bitreich.org	70
i+### CONFIGURATION END	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+fit_img_16_9() {	Err	bitreich.org	70
i+        convert -resize "$video_resolution"\> -size "$video_resolution" "$1" \	Err	bitreich.org	70
i+                xc:"$bgcolor" +swap -gravity center -composite "$2"	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+video_from_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 "$1" \	Err	bitreich.org	70
i+                -t "${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}" \	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 "${title_display_time}" \	Err	bitreich.org	70
i+                $ffmpec_codec \	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 -max_muxing_queue_size 1024 "$2"	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,jpeg,JPG,png,PNG}; do	Err	bitreich.org	70
i+        out="${memecache_conv}/$(basename "${f%.*}.${video_ext}")"	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%.${video_ext}}.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.${video_ext}" ]; then	Err	bitreich.org	70
i+        title_slide bitreich-tv bitreich-tv.${video_ext}	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"/*."${video_ext}"; do	Err	bitreich.org	70
i+	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%.*}.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 "*.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(/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 "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:${pass}@localhost:8000/brtvfallback	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+# encode daily video file	Err	bitreich.org	70
i+ffmpeg -n -f concat -safe 0 -i "$playlist" \	Err	bitreich.org	70
i+        -f "${video_ext}" -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+        -to "$out_video_duration" 	Err	bitreich.org	70
i+        "$video_out"	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+exit 0	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+printf '\nstarting stream\n'	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+ffmpeg -f concat -safe 0 -stream_loop -1 -i "$video_out" \	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:${pass}@adamsgaard.dk:3232/brtv	Err	bitreich.org	70
.
Response: text/plain
Original URLgopher://bitreich.org/0/scm/bitreich-tv/commit/3a8559a5c9...
Content-Typetext/plain; charset=utf-8