Files
ElyOffice/site/video/web.sh
T

50 lines
1.7 KiB
Bash
Executable File

#!/usr/bin/env bash
# Builds web clips, posters and the launch film.
set -euo pipefail
here="$(cd "$(dirname "$0")" && pwd)"
rec="$here/out/rec"
clips="$here/../public/clips"
film="$here/../public/film"
mkdir -p "$clips" "$film"
# name source start end
cuts=(
"doc doc 3.0 10.6"
"table table 16.0 23.6"
"show show-play 2.6 9.6"
"pdf pdf 8.8 16.3"
"tree tree 9.5 16.8"
"mark mark 5.4 13.4"
)
fade=0.2
size="scale=1280:720:flags=lanczos,fps=30,format=yuv420p"
for cut in "${cuts[@]}"; do
read -r name src start end <<<"$cut"
len=$(echo "$end - $start" | bc)
at=$(echo "$len - $fade" | bc)
one=$(echo "$start + 0.05" | bc)
frames=$(echo "$len * 30 / 1" | bc)
# Last 0.2 s fades into the first frame.
graph="[0:v]trim=start=$start:end=$end,setpts=PTS-STARTPTS,$size[a];
[0:v]trim=start=$start:end=$one,setpts=PTS-STARTPTS,$size,trim=end_frame=1,tpad=stop_mode=clone:stop_duration=$fade[b];
[a][b]xfade=transition=fade:duration=$fade:offset=$at[v]"
ffmpeg -v error -y -i "$rec/$src.mp4" -filter_complex "$graph" -map "[v]" -frames:v "$frames" -an \
-c:v libx264 -profile:v high -preset slow -crf 24 -pix_fmt yuv420p \
-movflags +faststart "$clips/$name.mp4"
ffmpeg -v error -y -i "$clips/$name.mp4" -an \
-c:v libvpx-vp9 -crf 36 -b:v 0 -row-mt 1 -deadline good -cpu-used 2 \
"$clips/$name.webm"
ffmpeg -v error -y -i "$clips/$name.mp4" -frames:v 1 -q:v 4 "$clips/$name.jpg"
done
src="$here/out/ElyOffice-launch.mp4"
ffmpeg -v error -y -i "$src" -vf "scale=1920:1080:flags=lanczos,format=yuv420p" \
-c:v libx264 -profile:v high -preset slow -crf 23 \
-c:a aac -b:a 160k -movflags +faststart "$film/ely-office.mp4"
ffmpeg -v error -y -ss 17 -i "$src" -frames:v 1 -q:v 3 "$film/poster.jpg"
ls -l "$clips" "$film"