docs/demo/render.sh
30 lines · 1251 bytes · executable
1#!/bin/sh
2# Render tapes to frames with vhs and encode them here: vhs 0.12's own
3# ffmpeg step writes nothing under ffmpeg 9. Several tapes are joined in
4# order. A tape already recorded is reused: the tapes write to gitbay.org,
5# so delete docs/demo/out/<name> to record one again. Writes
6# docs/demo/out/demo.{mp4,webm,gif}.
7#
8# DEMO_CODE=<mailed code> docs/demo/render.sh signup verify ship
9set -eu
10cd "$(dirname "$0")/../.."
11out=docs/demo/out
12bg=0b0b0b
13list=$out/concat.txt
14mkdir -p "$out"
15: > "$list"
16for name in "$@"; do
17 [ -d "$out/$name" ] || vhs "docs/demo/$name.tape"
18 ffmpeg -loglevel error -y \
19 -framerate 50 -i "$out/$name/frame-text-%05d.png" \
20 -framerate 50 -i "$out/$name/frame-cursor-%05d.png" \
21 -filter_complex "[0][1]overlay,pad=1248:688:32:32:color=$bg" \
22 -c:v libx264 -pix_fmt yuv420p -r 25 "$out/$name.mp4"
23 echo "file '$name.mp4'" >> "$list"
24done
25ffmpeg -loglevel error -y -f concat -safe 0 -i "$list" -c copy "$out/demo.mp4"
26ffmpeg -loglevel error -y -i "$out/demo.mp4" -c:v libvpx-vp9 -b:v 0 -crf 40 "$out/demo.webm"
27ffmpeg -loglevel error -y -i "$out/demo.mp4" \
28 -vf "fps=10,scale=960:-1:flags=lanczos,split[a][b];[a]palettegen=max_colors=32[p];[b][p]paletteuse=dither=none" \
29 "$out/demo.gif"
30ls -l "$out"/demo.*