当使用filter_complex时,如何使用FFmpeg剪辑视频?

6

我正在使用ffmpeg中的complex_filter来合并多个视频文件。

ffmpeg -i video1.webm -i video2.webm -v debug -strict -2 -filter_complex "[0:v] [0:a:0] [1:v] [1:a:0] concat=n=2:v=1:a=1 [v] [a]" -map "[v]" -map "[a]" output.mp4

这对我很有帮助。但是现在我想为每个输入视频选择一个起点和终点,以便我可以剪辑每个视频。
我已经尝试过:
ffmpeg -i video1.webm -ss 00:00:01.000 -t 00:00:05.658 -i video2.webm -ss 00:00:01.000 -t 00:00:05.658 -v debug -strict -2 -filter_complex "[0:v] [0:a:0] [1:v] [1:a:0] concat=n=2:v=1:a=1 [v] [a]" -map "[v]" -map "[a]" output.mp4

但是事实并非如此。而且 -to 参数也无法正常工作。

是否可以使用复杂过滤器来实现这个功能?


这个问题可能更适合放在superuser.com上。 - mrks
确实如此,但请确保在此处删除问题,然后发布到那里,或者等待迁移(可能需要几天甚至更长时间...)。有关您的答案,请参见http://video.stackexchange.com/a/10401/525。 - slhck
1个回答

0
Oculus的John Carmack表示,您可以使用此(https://mediamachine.io/blog/ffmpeg-series-complex-filters-trim-concat/):
ffmpeg \
-i "$INPUT_FILE_1" \
-i "$INPUT_FILE_2" \
-i "$INPUT_FILE_3" \
-filter_complex \
"[0:v]trim=start=5:duration=10,setpts=PTS-STARTPTS[v0]; \
 [0:a]atrim=start=5:duration=10,asetpts=PTS-STARTPTS[a0]; \
 [1:v]trim=start=20:duration=10,setpts=PTS-STARTPTS[v1];
 [1:a]atrim=start=20:duration=10,asetpts=PTS-STARTPTS[a1]; \
 [2:v]trim=start=20:duration=10,setpts=PTS-STARTPTS[v2];
 [2:a]atrim=start=20:duration=10,asetpts=PTS-STARTPTS[a2]; \
 [v0][a0][v1][a1][v2][a2]concat=n=3:v=1:a=1[final]" \
-map "[final]" concat-video.mp4

所以,以你的例子为例

ffmpeg -i video1.webm -i video2.webm  -v debug -strict -2
-filter_complex 
"[0:v]trim=start=1:duration=4.658[v0]
[0:a:0]atrim=start=1:duration=4.658[a0]
[1:v]trim=start=1:duration=4.658[v1]
[1:a:0]atrim=start=1:duration=4.658[a1]
[v0][a0][v1][a1]concat=n=2:v=1:a=1[v][a]"
-map "[v]" -map "[a]" output.mp4

我相信只有在您的视频从不同的起始位置进行了修剪时,您才需要setpts。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接