make-video.sh 1.2 KB

1234567891011121314151617181920212223242526272829303132
  1. #!/usr/bin/env bash
  2. # Trim the recorded demo segment, burn Chinese captions, encode H.264.
  3. set -euo pipefail
  4. ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  5. FRAMES="${1:-$ROOT/frames/install}"
  6. OUT="${2:-$ROOT/pcl-2.99.0.1-poc-demo.mp4}"
  7. TIMELINE="${TIMELINE:-$ROOT/evidence/demo-timeline.csv}"
  8. SRT="$ROOT/demo.srt"
  9. TRIM="$ROOT/trim.json"
  10. python3 "$ROOT/make_srt.py" \
  11. --frames "$FRAMES/index.csv" \
  12. --timeline "$TIMELINE" \
  13. --captions "$ROOT/subtitles/captions.tsv" \
  14. --out "$SRT" \
  15. --trim "$TRIM"
  16. FPS="$(python3 -c 'import json; print(json.load(open("'"$TRIM"'"))["fps"])')"
  17. START="$(python3 -c 'import json; print(json.load(open("'"$TRIM"'"))["start_frame"])')"
  18. COUNT="$(python3 -c 'import json; print(json.load(open("'"$TRIM"'"))["frames"])')"
  19. cd "$ROOT"
  20. ffmpeg -y -hide_banner \
  21. -framerate "$FPS" -start_number "$START" \
  22. -i "$FRAMES/frame-%06d.jpg" \
  23. -frames:v "$COUNT" \
  24. -vf "subtitles=demo.srt:force_style='FontName=Noto Sans CJK SC,FontSize=9,PrimaryColour=&H00FFFFFF,OutlineColour=&H00000000,BorderStyle=1,Outline=1,Shadow=0,MarginV=18'" \
  25. -c:v libx264 -preset veryfast -crf 20 -pix_fmt yuv420p \
  26. -movflags +faststart "$OUT"
  27. echo "wrote $OUT"