iPut image->video processing into 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 469296142ed571c3e38749a234a9eb31205645ac /scm/bitreich-tv/commit/469296142ed571c3e38749a234a9eb31205645ac.gph bitreich.org 70
1parent 9712aec3da3a8dd8e17f8626c138ae12c26e9c8c /scm/bitreich-tv/commit/9712aec3da3a8dd8e17f8626c138ae12c26e9c8c.gph bitreich.org 70
hAuthor: Anders Damsgaard <anders@adamsgaard.dk> URL:mailto:anders@adamsgaard.dk bitreich.org 70
iDate: Sun, 16 Aug 2020 21:33:26 +0200 Err bitreich.org 70
i Err bitreich.org 70
iPut image->video processing into separate script Err bitreich.org 70
i Err bitreich.org 70
iDiffstat: Err bitreich.org 70
i A brtv-imgs-to-video.sh | 78 +++++++++++++++++++++++++++++++ Err bitreich.org 70
i Err bitreich.org 70
i1 file changed, 78 insertions(+), 0 deletions(-) Err bitreich.org 70
i--- Err bitreich.org 70
1diff --git a/brtv-imgs-to-video.sh b/brtv-imgs-to-video.sh /scm/bitreich-tv/file/brtv-imgs-to-video.sh.gph bitreich.org 70
i@@ -0,0 +1,78 @@ Err bitreich.org 70
i+#!/bin/sh Err bitreich.org 70
i+# read hashtags.txt as stdin, download all images, and convert them to videos Err bitreich.org 70
i+# requirements: hurl(1), 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+# dir to contain images as videos Err bitreich.org 70
i+out_dir="img2vid" 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+ 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+### 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+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+ 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" < /dev/null Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+mkdir -p "$out_dir" Err bitreich.org 70
i+ Err bitreich.org 70
i+# generate video from each image Err bitreich.org 70
i+# TODO: deal with .gif Err bitreich.org 70
i+while read -r tag url; do Err bitreich.org 70
i+ if ! regeximatch "$url" '\.(jpg|jpeg|png)$'; then Err bitreich.org 70
i+ continue Err bitreich.org 70
i+ fi Err bitreich.org 70
i+ Err bitreich.org 70
i+ imgfile="${out_dir}/${url##*/}" Err bitreich.org 70
i+ out="${imgfile%.*}.${video_ext}" Err bitreich.org 70
i+ Err bitreich.org 70
i+ if [ ! -f "$out" ]; then Err bitreich.org 70
i+ Err bitreich.org 70
i+ if [ ! -f "$imgfile" ]; then Err bitreich.org 70
i+ if ! hurl "$url" > "$imgfile"; then Err bitreich.org 70
i+ die "hurl could not download $url" Err bitreich.org 70
i+ fi Err bitreich.org 70
i+ fi Err bitreich.org 70
i+ Err bitreich.org 70
i+ if ! regeximatch "$(file -ib "$imgfile")" "^image\/"; then Err bitreich.org 70
i+ die "input image $imgfile is invalid ($(file -b "$imgfile"))" Err bitreich.org 70
i+ fi Err bitreich.org 70
i+ fit_img_16_9 "$imgfile" "${out%.*}_16-9.jpg" Err bitreich.org 70
i+ video_from_img "${out%.${video_ext}}_16-9.jpg" "${out}" Err bitreich.org 70
i+ printf '%s\n' "$out" Err bitreich.org 70
i+ fi Err bitreich.org 70
i+done Err bitreich.org 70
.
Response:
text/plain