SMOLNET PORTAL home about changes
iRemove old wip 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 02c0fc491be147c4438d80ca59557b02fdffce21	/scm/bitreich-tv/commit/02c0fc491be147c4438d80ca59557b02fdffce21.gph	bitreich.org	70
1parent ac639f0d7f8feadca0ef246d65bcc039fd73e90a	/scm/bitreich-tv/commit/ac639f0d7f8feadca0ef246d65bcc039fd73e90a.gph	bitreich.org	70
hAuthor: Anders Damsgaard <anders@adamsgaard.dk>	URL:mailto:anders@adamsgaard.dk	bitreich.org	70
iDate:   Sun, 16 Aug 2020 22:20:50 +0200	Err	bitreich.org	70
i	Err	bitreich.org	70
iRemove old wip script	Err	bitreich.org	70
i	Err	bitreich.org	70
iDiffstat:	Err	bitreich.org	70
i  D brtv-start.sh                       |     166 -------------------------------	Err	bitreich.org	70
i	Err	bitreich.org	70
i1 file changed, 0 insertions(+), 166 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@@ -1,166 +0,0 @@	Err	bitreich.org	70
i-#!/bin/sh	Err	bitreich.org	70
i-# generate title animations and start streaming to server	Err	bitreich.org	70
i-# requirements: ffmpeg(1), convert(1)	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-pass="$(gpg2 -q -d icecastpass.gpg)"	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-die() {	Err	bitreich.org	70
i-        printf '%s: error: %s\n' "${0##*/}" "$1" >&2	Err	bitreich.org	70
i-        exit 1	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-regeximatch() {	Err	bitreich.org	70
i-        printf '%s' "$1" | grep -iEq "$2"	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-if [ $# -ne 1 ]; then	Err	bitreich.org	70
i-        die "usage: ${0##*/} <memecache_path>"	Err	bitreich.org	70
i-fi	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-        printf 'image to video %s -> %s\n' "$1" "$2"	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-        printf 'title_slide %s -> %s\n' "$1" "$img"	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-                $ffmpeg_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-        printf 'encode %s -> %s\n' "$1" "$2"	Err	bitreich.org	70
i-        if ! regeximatch "$(file -ib "$f")" "^video\/"; then	Err	bitreich.org	70
i-                die "input video $1 is invalid ($(file -b "$1"))"	Err	bitreich.org	70
i-        fi	Err	bitreich.org	70
i-        ffmpeg -y -i "$1" $ffmpeg_codec "$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 \	Err	bitreich.org	70
i-        "$memecache"/*.jpeg \	Err	bitreich.org	70
i-        "$memecache"/*.JPG \	Err	bitreich.org	70
i-        "$memecache"/*.png \	Err	bitreich.org	70
i-        "$memecache"/*.PNG; do	Err	bitreich.org	70
i-        out="${memecache_conv}/$(basename "${f%.*}.${video_ext}")"	Err	bitreich.org	70
i-        if [ ! -f "$out" ]; then	Err	bitreich.org	70
i-                if ! regeximatch "$(file -ib "$f")" "^image\/"; then	Err	bitreich.org	70
i-                        die "input image $f is invalid ($(file -b "$f"))"	Err	bitreich.org	70
i-                fi	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-# make title slides for video and converted images and encode all video clips 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%.*}.${video_ext}")"	Err	bitreich.org	70
i-        [ ! -f "$title_path" ] && title_slide "$f" "$title_path"	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        out="${memecache_conv}/$(basename "${f%.*}.${video_ext}")"	Err	bitreich.org	70
i-        [ ! -f "$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-	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-        -codec copy \	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-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 4 \	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/02c0fc491b...
Content-Typetext/plain; charset=utf-8