ibrtv-imgs-to-video.sh - 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 ibrtv-imgs-to-video.sh (1698B) Err bitreich.org 70 i--- Err bitreich.org 70 i 1 #!/bin/sh Err bitreich.org 70 i 2 # read hashtags.txt as stdin, download all images, and convert them to videos Err bitreich.org 70 i 3 # requirements: hurl(1), ffmpeg(1), convert(1) Err bitreich.org 70 i 4 Err bitreich.org 70 i 5 ### CONFIGURATION START Err bitreich.org 70 i 6 Err bitreich.org 70 i 7 # dir to contain images as videos Err bitreich.org 70 i 8 out_dir="/br/gopher/tv/img2vid" Err bitreich.org 70 i 9 Err bitreich.org 70 i 10 # ffmpeg flags for generated videos Err bitreich.org 70 i 11 video_ext="webm" Err bitreich.org 70 i 12 ffmpeg_codec="-loglevel error -acodec libopus -b:a 96K -f webm -vf scale=1280:-1 -r 30 -ac 2" Err bitreich.org 70 i 13 Err bitreich.org 70 i 14 # target video resolution Err bitreich.org 70 i 15 video_resolution=1280x720 Err bitreich.org 70 i 16 Err bitreich.org 70 i 17 # slide style Err bitreich.org 70 i 18 # xc:$color ( https://imagemagick.org/script/color.php ) Err bitreich.org 70 i 19 # /some/file.png Err bitreich.org 70 i 20 bgcontent=/br/gopher/tv/bitreich-tv-bg.png Err bitreich.org 70 i 21 Err bitreich.org 70 i 22 # show image memes for this duration [s] Err bitreich.org 70 i 23 image_display_time=10 Err bitreich.org 70 i 24 Err bitreich.org 70 i 25 ### CONFIGURATION END Err bitreich.org 70 i 26 Err bitreich.org 70 i 27 Err bitreich.org 70 i 28 die() { Err bitreich.org 70 i 29 printf '%s: error: %s\n' "${0##*/}" "$1" >&2 Err bitreich.org 70 i 30 exit 1 Err bitreich.org 70 i 31 } Err bitreich.org 70 i 32 Err bitreich.org 70 i 33 regeximatch() { Err bitreich.org 70 i 34 printf '%s' "$1" | grep -iEq "$2" Err bitreich.org 70 i 35 } Err bitreich.org 70 i 36 Err bitreich.org 70 i 37 fit_img_16_9() { Err bitreich.org 70 i 38 convert -resize "$video_resolution" -size "$video_resolution" "$1" \ Err bitreich.org 70 i 39 "$bgcontent" +swap -gravity center -composite "$2" Err bitreich.org 70 i 40 } Err bitreich.org 70 i 41 Err bitreich.org 70 i 42 video_from_img() { Err bitreich.org 70 i 43 ffmpeg -y \ Err bitreich.org 70 i 44 -f lavfi \ Err bitreich.org 70 i 45 -i anullsrc=r=48000 \ Err bitreich.org 70 i 46 -i "$1" \ Err bitreich.org 70 i 47 -t "${image_display_time}" \ Err bitreich.org 70 i 48 $ffmpeg_codec \ Err bitreich.org 70 i 49 "$2" < /dev/null Err bitreich.org 70 i 50 } Err bitreich.org 70 i 51 Err bitreich.org 70 i 52 mkdir -p "$out_dir" Err bitreich.org 70 i 53 Err bitreich.org 70 i 54 # generate video from each image Err bitreich.org 70 i 55 while read -r tag url; do Err bitreich.org 70 i 56 if ! regeximatch "$url" '\.(jpg|jpeg|png|gif)$'; then Err bitreich.org 70 i 57 continue Err bitreich.org 70 i 58 fi Err bitreich.org 70 i 59 Err bitreich.org 70 i 60 imgfile="${out_dir}/${url##*/}" Err bitreich.org 70 i 61 out="${imgfile%.*}.${video_ext}" Err bitreich.org 70 i 62 Err bitreich.org 70 i 63 if [ ! -f "$out" ]; then Err bitreich.org 70 i 64 Err bitreich.org 70 i 65 if [ ! -f "$imgfile" ]; then Err bitreich.org 70 i 66 if ! hurl "$url" > "$imgfile"; then Err bitreich.org 70 i 67 die "hurl could not download $url" Err bitreich.org 70 i 68 fi Err bitreich.org 70 i 69 fi Err bitreich.org 70 i 70 Err bitreich.org 70 i 71 if ! regeximatch "$(file -ib "$imgfile")" "^image\/"; then Err bitreich.org 70 i 72 die "input image $imgfile is invalid ($(file -b "$imgfile"))" Err bitreich.org 70 i 73 fi Err bitreich.org 70 i 74 fit_img_16_9 "$imgfile" "${out%.*}_16-9.jpg" Err bitreich.org 70 i 75 video_from_img "${out%.${video_ext}}_16-9.jpg" "${out}" Err bitreich.org 70 i 76 printf '%s\n' "$out" Err bitreich.org 70 i 77 fi Err bitreich.org 70 i 78 done Err bitreich.org 70 .