使用 FFMPEG 从时间线修剪、淡入淡出和连接视频

使用 FFMPEG 从时间线修剪、淡入淡出和连接视频

我正在尝试构建一个命令来输出带有一些 JSON 数据的视频,类似于时间线。在我的示例中,我有 3 个视频:video1.mp4 (43 秒)、video2.mp4 (28 秒)、video3.mp4 (16 秒)

我正在尝试修剪所有视频并设置相同的配置,并且我想添加(2s)从视频 1 到视频 2 的“wiperight”以及从视频 2 到视频 3 的“wipeup”的过渡。

然后将所有内容连接成一个视频。

我从简单的设置配置+修剪+连接开始:

ffmpeg -i video1.mp4 \
     -i video2.mp4 \
     -i video3.mp4 \
    -filter_complex \
    "[0:v]trim=start=0:end=7,setpts=PTS-STARTPTS,scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:-1:-1,setsar=1,fps=24,format=yuv420p[v0]; \
    [1:v]trim=start=0:end=10,setpts=PTS-STARTPTS,scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:-1:-1,setsar=1,fps=24,format=yuv420p[v1]; \
    [2:v]trim=start=0:end=7,setpts=PTS-STARTPTS,scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:-1:-1,setsar=1,fps=24,format=yuv420p[v2]; \
    [0:a]atrim=start=0:end=7,asetpts=PTS-STARTPTS[a0]; \
    [1:a]atrim=start=0:end=10,asetpts=PTS-STARTPTS[a1]; \
    [2:a]atrim=start=0:end=7,asetpts=PTS-STARTPTS[a2]; \
    [v0][a0][v1][a1][v2][a2]concat=n=3:v=1:a=1[v][a]" \
    -map "[v]" -map "[a]" -c:v libx264 -c:a aac -movflags +faststart output.mp4

但现在我似乎无法添加过渡:

ffmpeg -i video1.mp4 \
     -i video2.mp4 \
     -i video3.mp4 \
    -filter_complex \
    "[0:v]trim=start=0:end=7,setpts=PTS-STARTPTS,scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:-1:-1,setsar=1,fps=24[v0]; \
    [1:v]trim=start=0:end=10,setpts=PTS-STARTPTS,scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:-1:-1,setsar=1,fps=24[v1]; \
    [2:v]trim=start=0:end=7,setpts=PTS-STARTPTS,scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:-1:-1,setsar=1,fps=24[v2]; \
    [0:a]atrim=start=0:end=7,asetpts=PTS-STARTPTS[a0]; \
    [1:a]atrim=start=0:end=10,asetpts=PTS-STARTPTS[a1]; \
    [2:a]atrim=start=0:end=7,asetpts=PTS-STARTPTS[a2]; \
    [v0]xfade=transition=wiperight:duration=2:offset=5[fade0]; \
    [v1]xfade=transition=wipeup:duration=2:offset=8[fade1]; \
    [fade0][a0][fade1][a1][v2][a2]concat=n=3:v=1:a=1[v][a]" \
    -map "[v]" -map "[a]" -pix_fmt yuv420p -c:v libx264 -c:a aac -movflags +faststart concatenado_transicoes.mp4

终端错误:“无法在过滤器 Parsed_xfade_24 上找到未标记输入板 1 的匹配流”

我尝试了更多不同的变化,得到的最好结果是实际构建文件 transitions.mp4,我可以打开并且可以听到声音,但没有图像。

感谢您的帮助,

乔治

答案1

xfade, acrossfade, -to 改为 trim, atrim

ffmpeg \
-to  7 -i 'input0.mp4' \
-to 10 -i 'input1.mp4' \
-to  7 -i 'input2.mp4' \
-filter_complex "
[0:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:-1:-1,setsar=1,fps=24[v0];
[1:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:-1:-1,setsar=1,fps=24[v1];
[2:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:-1:-1,setsar=1,fps=24[v2];
[v0][v1]xfade=transition=pixelize:duration=2:offset=5[x1];
[x1][v2]xfade=transition=pixelize:duration=2:offset=13;
[0:a]aresample=async=1[a0];
[1:a]aresample=async=1[a1];
[2:a]aresample=async=1[a2];
[a0][a1]acrossfade=d=2[c1];
[c1][a2]acrossfade=d=2
" out.mp4

相关内容