File size: 1,110 Bytes
261e6ac
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash
# usage: edit_mv.sh <title_image> <perf_video> <song_audio> <out> [title_secs] [W] [H]
# The performance video is lip-synced from t=0, so the SONG is delayed by title_secs
# to line her lips back up after the title card.
set -e
TITLE="$1"; PERF="$2"; SONG="$3"; OUT="$4"; TS="${5:-3}"; W="${6:-1024}"; H="${7:-1536}"
TMP=/marimo/ai_studio/outputs/_edit; mkdir -p "$TMP"
MS=$(( TS * 1000 ))
ffmpeg -y -loop 1 -i "$TITLE" -t "$TS" \
  -vf "scale=${W}:${H},zoompan=z='min(zoom+0.0006,1.06)':d=${TS}*25:s=${W}x${H},fps=25,format=yuv420p" \
  -r 25 -c:v libx264 -pix_fmt yuv420p "$TMP/title.mp4" 2>/dev/null
ffmpeg -y -i "$PERF" -vf "scale=${W}:${H},fps=25,format=yuv420p" -c:v libx264 -pix_fmt yuv420p -an "$TMP/perf.mp4" 2>/dev/null
ffmpeg -y -i "$TMP/title.mp4" -i "$TMP/perf.mp4" \
  -filter_complex "[0:v][1:v]concat=n=2:v=1:a=0[v]" -map "[v]" -c:v libx264 -pix_fmt yuv420p "$TMP/video.mp4" 2>/dev/null
ffmpeg -y -i "$TMP/video.mp4" -i "$SONG" \
  -filter_complex "[1:a]adelay=${MS}|${MS},apad[a]" -map 0:v -map "[a]" \
  -c:v copy -c:a aac -b:a 256k -shortest "$OUT" 2>/dev/null
echo "WROTE $OUT"