ffmpeg 裁剪、合并视频的多个部分

我需要裁剪视频文件的多个部分,并将其合并成一个新的视频。

如果我只想剪下一部分,我会做:

ffmpeg -i video.mp4 -ss 00:00:03.500 -to 00:00:08.500 -async 1 cut.mp4 -y

我想剪多个部分,然后合并所有的裁剪:

#视频裁剪:
ffmpeg -ss 00:00:09.846609 -to 00:00:12.263177 -i a.mp4 b.mp4
ffmpeg -ss 00:00:27.916761 -to 00:00:28.890601 -i a.mp4 c.mp4
#视频合并:
echo file 'b.mp4' >> concat.txt
echo file 'c.mp4' >> concat.txt
ffmpeg -f concat -i concat.txt end.mp4

但对于较大的视频文件,这是非常低效的。

为了进行两次切割,我使用过滤器复合体

如果我这样做,我会得到一个没有音频的视频:

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

我甚至尝试用Python中的ffmpeg Python(GitHub - kkroening/ffmpeg-python: Python bindings for FFmpeg - with complex filtering support)来实现这一点,但也无法让音频工作。

最终通过选择过滤器实现了该需求:

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秒;时间戳与设置点及其对应的过滤器保持连续。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

戴国进

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值