Add preliminary brtv script for converting media and starting server - bitreich-memestats - Bitreich meme statistics and graphs.
 (HTM) git clone git://bitreich.org/bitreich-memestats git://hg6vgqziawt5s4dj.onion/bitreich-memestats
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Tags
 (DIR) LICENSE
       ---
 (DIR) commit 4cd41bb24ae99df1a7b018632619ed6357763f15
 (DIR) parent 8b472486508e8fc511caba8c525d6519e1ee7383
 (HTM) Author: Anders Damsgaard <anders@adamsgaard.dk>
       Date:   Sun, 19 Apr 2020 20:09:52 +0000
       
       Add preliminary brtv script for converting media and starting server
       
       Diffstat:
         A brtv-start.sh                       |     116 ++++++++++++++++++++++++++++++
       
       1 file changed, 116 insertions(+), 0 deletions(-)
       ---
 (DIR) diff --git a/brtv-start.sh b/brtv-start.sh
       @@ -0,0 +1,116 @@
       +#!/bin/sh
       +
       +# mkv streaming server executable
       +# git://github.com/klaxa/mkvserver_mk2
       +bin=mkvserver_mk2
       +
       +# memecache source dir
       +memecache=../memecache
       +
       +# converted memecache dir
       +memecache_conv=memecache
       +
       +# title animations dir
       +title="title"
       +
       +# desired ffmpeg codec flags
       +ffmpeg_codec="-c:v libx264 -c:a libvorbis -f matroska"
       +
       +# port for streaming socket (combined stream hosted on port 8080)
       +commport=12345
       +
       +# target video resolution
       +video_resolution=1280x720
       +
       +# slide style
       +bgcolor=magenta
       +fcolor=white
       +
       +# show image memes for this duration [s]
       +image_display_time=10
       +
       +# show title slides for this duration [s]
       +title_display_time=5
       +
       +
       +
       +fit_img_16_9() {
       +        convert -resize "$video_resolution"\> -size "$video_resolution" "$1" \
       +                xc:"$bgcolor" +swap -gravity center -composite "$2"
       +}
       +
       +video_from_img() {
       +        ffmpeg -y \
       +                -f lavfi \
       +                -i anullsrc=r=48000 \
       +                -i "$1" \
       +                -t "00:${3}:00" \
       +                $ffmpeg_codec \
       +                "$2"
       +}
       +
       +title_slide() {
       +        convert -size 640x480 xc:"$bgcolor" -pointsize 48 -fill "$fgcolor" \
       +                -gravity center -draw "text 0,0 '#${1%.*}'" "/tmp/${1%.*}.png"
       +        ffmpeg -y \
       +                -f lavfi \
       +                -i anullsrc=r=48000 \
       +                -i "/tmp/${1%.*}.png" \
       +                -t "00:${title_display_time}:00" \
       +                $ffmpec_codec\
       +                "$2"
       +}
       +
       +video_conv() {
       +        ffmpeg -y -i "$1" $ffmpeg_codec "$2"
       +}
       +
       +
       +mkdir -p "$title"
       +mkdir -p "$memecache_conv"
       +
       +# generate video from each image
       +for f in "$memecache"/*.jpg "$memecache"/*.png "$memecache"/*.JPG; do
       +        out="${memecache_conv}/$(basename "${f%.*}.mkv")"
       +        if [ ! -e "$out" ]; then
       +                fit_img_16_9 "$f" "${out%.*}.jpg"
       +                video_from_img "${out%.mkv}.jpg" "${out}" "${image_display_time}"
       +        fi
       +done
       +
       +# make title slides for video and converted images and encode to common codec
       +for f in "$memecache"/*.mkv \
       +         "$memecache"/*.mp4 \
       +                 "$memecache"/*.webm \
       +                 "$memecache_conv"/*.mkv; do
       +
       +        title_path="${title}/$(basename "${f%.*}.mkv")"
       +        [ ! -e "${title_path}" ] && title_slide "$f" "$title_path"
       +
       +        out="${memecache_conv}/$(basename "${f%.*}.mkv")"
       +        [ ! -e "${out}" ] && video_conv "$f" "$out"
       +done
       +
       +# generate random playlist from converted memes and add title slides
       +find "$memecache_conv" -maxdepth 1 -name "*.mkv" -type f | sort -R | \
       +        sed "s/^/file '/;s/$/'/" | \
       +        awk -v titledir="$title" '
       +        function add_title(s) {
       +                sub(/\.\//, titledir"/", s);
       +                return s
       +        }
       +        {line=$0;
       +        print add_title($line);
       +        print $0}' > playlist
       +
       +netcat -l -p "$commport" | $bin >/dev/null 2>&1 &
       +sleep 2
       +
       +ffmpeg -f concat -safe 0 -i playlist \
       +        -f matroska \
       +        $ffmpeg_codec \
       +        -max_muxing_queue_size 9999 \
       +        tcp://localhost:$commport
       +
       +
       +pkill $bin