From ffad52585701f040f4d3663fa53d0a1930dc0bdb Mon Sep 17 00:00:00 2001 From: Dominic Date: Sun, 29 Oct 2023 21:56:12 +0100 Subject: [PATCH] test render script can cut without desync --- 230101/setup.sh | 24 +++++++++++++++ 230101/test_render.sh | 72 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100755 230101/setup.sh create mode 100755 230101/test_render.sh diff --git a/230101/setup.sh b/230101/setup.sh new file mode 100755 index 0000000..f6724ad --- /dev/null +++ b/230101/setup.sh @@ -0,0 +1,24 @@ +#!/bin/busybox ash +set -euo pipefail + +for i in 1 2 3; do rm "C0$i.svg" || true; rm "C0$i.mp4" || true; done + +function write_svg() { + echo '' + echo ' ' + echo '' +} + +write_svg blue >C01.svg +write_svg green >C02.svg +write_svg red >C03.svg + +function render_svg() { + ffmpeg -hide_banner -vaapi_device /dev/dri/renderD128 \ + -loop 1 -i "$1" \ + -filter_complex "[0]format=nv12,hwupload[v];aevalsrc=sin($3*2*PI*t):s=48000[a]" \ + -map "[v]" -map "[a]" \ + -c:v h264_vaapi -r 25 -t 4 -b:a 128000 "$2" +} + +for i in 1 2 3; do render_svg "C0$i.svg" "C0$i.mp4" $(($i*40+400)); done diff --git a/230101/test_render.sh b/230101/test_render.sh new file mode 100755 index 0000000..097f297 --- /dev/null +++ b/230101/test_render.sh @@ -0,0 +1,72 @@ +#!/bin/busybox ash +set -euo pipefail + +cd "$(dirname "$0")" + +lecture=test_render +mkdir -p "$lecture" +rm "$lecture"/* || true + +for file in *.mp4; do echo "file '$(realpath "$file")'" >>"$lecture/recording.txt"; done + +function write_svg() { + echo '' + echo ' ' + echo ' ' + echo " $1" + echo ' ' + echo '' +} + +write_svg Intro >"$lecture/intro.svg" +write_svg Outro >"$lecture/outro.svg" + +set -x + +ffmpeg \ + -hide_banner \ + -f concat \ + -safe 0 \ + -i "$lecture/recording.txt" \ + -af "pan=stereo|c0=c0|c1=c0,aformat=sample_rates=48000" \ + -c:v copy -b:a 128000 \ + "$lecture/recording.mp4" + +ffmpeg \ + -hide_banner \ + -vaapi_device /dev/dri/renderD128 \ + -loop 1 -i "$lecture/intro.svg" \ + -filter_complex "[0]format=nv12,hwupload[v];aevalsrc=0:s=48000[a]" \ + -map "[v]" -map "[a]" \ + -c:v h264_vaapi -r 25 -t 3 -b:a 128000 \ + "$lecture/intro.mp4" + +ffmpeg \ + -hide_banner \ + -vaapi_device /dev/dri/renderD128 \ + -loop 1 -i "$lecture/outro.svg" \ + -filter_complex "[0]format=nv12,hwupload[v];aevalsrc=0:s=48000[a]" \ + -map "[v]" -map "[a]" \ + -c:v h264_vaapi -r 25 -t 5 -b:a 128000 \ + "$lecture/outro.mp4" + +ffmpeg \ + -hide_banner \ + -vaapi_device /dev/dri/renderD128 \ + -i "$lecture/intro.mp4" \ + -i "$lecture/recording.mp4" \ + -i "$lecture/outro.mp4" \ + -i "../assets/logo.svg" \ + -i "../assets/fastforward.svg" \ + -async 1 \ + -filter_complex " + [1:v]trim=start=2:duration=8,setpts=PTS-STARTPTS[v_tmp0]; + [1:a]atrim=start=2:duration=8,asetpts=PTS-STARTPTS[a_tmp0]; + [0:v][0:a][v_tmp0][a_tmp0][2:v][2:a]concat=n=3:v=1:a=1[v_tmp1][a_tmp1]; + [v_tmp1]format=nv12,hwupload[final_v]; + [a_tmp1]anull[final_a] + " \ + -map '[final_v]' -map '[final_a]' \ + -c:v h264_vaapi -rc_mode CQP -global_quality 22 \ + -c:a aac -b:a 128000 \ + "$lecture/$lecture.mp4"