iGenerate title slides in separate 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 514e6788b34aa2fea81e685a03b0f0bc9e449157 /scm/bitreich-tv/commit/514e6788b34aa2fea81e685a03b0f0bc9e449157.gph bitreich.org 70 1parent 9e67470e2373361dea9c5707f30323bff524023d /scm/bitreich-tv/commit/9e67470e2373361dea9c5707f30323bff524023d.gph bitreich.org 70 hAuthor: Anders Damsgaard URL:mailto:anders@adamsgaard.dk bitreich.org 70 iDate: Sun, 16 Aug 2020 20:09:05 +0200 Err bitreich.org 70 i Err bitreich.org 70 iGenerate title slides in separate script Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i A brtv-generate-title-slides.sh | 64 +++++++++++++++++++++++++++++++ Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 64 insertions(+), 0 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/brtv-generate-title-slides.sh b/brtv-generate-title-slides.sh /scm/bitreich-tv/file/brtv-generate-title-slides.sh.gph bitreich.org 70 i@@ -0,0 +1,64 @@ Err bitreich.org 70 i+#!/bin/sh Err bitreich.org 70 i+# generate title slide animation for each hashtag in file specified by stdin. Err bitreich.org 70 i+# stdin would typically be annna's module/hashtags/hashtags.txt Err bitreich.org 70 i+# requirements: ffmpeg(1), convert(1) Err bitreich.org 70 i+ Err bitreich.org 70 i+ Err bitreich.org 70 i+### CONFIGURATION START Err bitreich.org 70 i+ Err bitreich.org 70 i+# output 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+ 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 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+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##*/} " Err bitreich.org 70 i+fi 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+mkdir -p "$title" Err bitreich.org 70 i+ Err bitreich.org 70 i+# make title slide for every file in $1/ if they do not already exist Err bitreich.org 70 i+while IFS=' Err bitreich.org 70 i+' read -r line; do Err bitreich.org 70 i+ out_path="${title}/$(basename "${f%.*}.${video_ext}")" Err bitreich.org 70 i+ [ ! -f "$out_path" ] && title_slide "$f" "$out_path" Err bitreich.org 70 i+done Err bitreich.org 70 .