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