如何使用ffmpeg直接移除视频中多个指定片段无需剪切后合并
FFmpeg批量删除指定视频区间实现方案
核心原理
通过FFmpeg内置的trim+concat滤镜组合,一次性在内存中完成保留片段的截取与拼接,无需生成中间剪切文件,满足需求。
单删除区间示例(匹配你给出的场景)
你的场景是删除1.25分钟(75秒)1.80分钟(108秒)的内容,保留075秒、108秒~120秒两段内容,执行命令如下:
ffmpeg -i input.mp4 -filter_complex \ "[0:v]trim=start=0:end=75,setpts=PTS-STARTPTS[v1]; \ [0:a]trim=start=0:end=75,asetpts=PTS-STARTPTS[a1]; \ [0:v]trim=start=108:end=120,setpts=PTS-STARTPTS[v2]; \ [0:a]trim=start=108:end=120,asetpts=PTS-STARTPTS[a2]; \ [v1][a1][v2][a2]concat=n=2:v=1:a=1[outv][outa]" \ -map "[outv]" -map "[outa]" output.mp4
多删除区间扩展方法
如果需要删除N个不连续区间,就会生成N+1段保留内容,按以下规则修改命令即可:
- 每增加一段保留内容,依次新增一组对应音视频的trim截取配置,命名按
v1/a1→v2/a2→v3/a3递增 - 修改concat参数的
n值为保留片段的总数量
举个例子:需要删除3个区间,对应4段保留内容,concat参数就写为concat=n=4:v=1:a=1,前面对应补充v3/a3、v4/a4的截取配置即可。
注意事项
- 时间参数默认单位为秒,也可以使用时分秒格式,比如75秒可以写为
00:01:15 - 如果需要加快处理速度,且可接受剪切点精度误差,可以在命令末尾加上
-c:v copy -c:a copy参数直接流拷贝,无需重编码。该方式要求剪切点必须落在视频关键帧上,否则会出现剪切点附近画面花屏、音画不同步的问题 setpts和asetpts是时间戳重置参数,必须添加,否则拼接后的视频会出现卡顿、时长显示异常的问题
内容的提问来源于stack exchange,提问作者skullleeep
相关产品推荐
相关产品推荐

