tAdd preliminary brtv script for converting media and starting server - bitreic… | |
git clone git://src.adamsgaard.dk/bitreich-memestats | |
Log | |
Files | |
Refs | |
--- | |
commit 4cd41bb24ae99df1a7b018632619ed6357763f15 | |
parent 8b472486508e8fc511caba8c525d6519e1ee7383 | |
Author: Anders Damsgaard <[email protected]> | |
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(-) | |
--- | |
diff --git a/brtv-start.sh b/brtv-start.sh | |
t@@ -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_tim… | |
+ 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 |