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