Add preliminary brtv script for converting media and starting server - bitreich-memestats - Bitreich meme statistics and graphs.
HTML 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
HTML 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