在我尝试做的事情中,我需要删除视频文件的某些部分,并从中创建一个新部分。
例如,来自这样的视频文件:
===================
我做了两次削减
======||=====||||==
并生成一个新的较小的视频文件:
=============
当我说2时,我的意思是任意数量的单独剪辑,具体取决于视频文件。
如果我只想削减一部分,我会这样做:
ffmpeg -i video.mp4 -ss 00:00:03.500 -to 00:00:08.500 -async 1 cut.mp4 -y
完美无缺。我或许可以多次这样做,然后将所有切割加在一起......但对于较大的视频文件来说这是非常低效的。
为了进行两次切割,我正在查看 filter_complex 。我已经试图将它弄好几个小时,但我似乎无法使其正常工作:/
如果我这样做,我会收到一段没有音频的视频:
command = 'ffmpeg -i video.mp4 \
-filter_complex "\
[0]trim=start_frame=10:end_frame=20[v0];\
[0]trim=start_frame=30:end_frame=40[v1];\
[v0][v1]concat=n=2[v5]"\
-map [v5] -async 1 output.mp4'
如果我尝试这样做,事情就会搞得一团糟:
ffmpeg -y -i video.mp4 \
-filter_complex "\
[0:v]trim=start_frame=10:end_frame=20[v0];\
[0:a]atrim=start=10:end=20[a0];\
[0:v]trim=start_frame=30:end_frame=40[v1];\
[0:a]atrim=start=30:end=40[a1];\
[v0][a0][v1][a1]concat=2:v=1:a=1[v5][a]"\
-map [v5] -map [a] -async 1 output.mp4
我甚至尝试使用 ffmpeg-python https://github.com/kkroening/ffmpeg-python在Python中进行此操作,但我也无法使用音频。
有人可以给我一些帮助吗? 非常感谢!!
答案 0 :(得分:4)
选择过滤器对此更好。
ffmpeg -i video -vf "select='between(t,4,6.5)+between(t,17,26)+between(t,74,91)',setpts=N/FRAME_RATE/TB" -af "aselect='between(t,4,6.5)+between(t,17,26)+between(t,74,91)',asetpts=N/SR/TB" out.mp4
select和它的对应滤波器分别应用于视频和音频。选择的段数为4至6.5秒,17至26秒,最后为74至91秒。时间戳与setpts及其对应的过滤器连续进行..