使用ffmpeg剪切视频的多个部分

时间:2018-05-29 23:36:48

标签: python video ffmpeg

在我尝试做的事情中,我需要删除视频文件的某些部分,并从中创建一个新部分。

例如,来自这样的视频文件:

===================

我做了两次削减

======||=====||||==

并生成一个新的较小的视频文件:

=============

当我说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中进行此操作,但我也无法使用音频。

有人可以给我一些帮助吗? 非常感谢!!

1 个答案:

答案 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及其对应的过滤器连续进行..