You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FFmpeg移除视频中间片段后切割点出现卡顿抖动的解决方法(要求不重新编码)

FFmpeg移除视频中间片段后切割点出现卡顿抖动的解决方法(要求不重新编码)

嘿,我太懂这种卡顿的烦躁感了!问题根源其实很简单:你选的切割点(60秒和200秒)大概率不在视频的关键帧上。FFmpeg用concat直接拼接非关键帧位置的片段时,播放器没法立刻解码播放那个位置的画面,必须从最近的前一个关键帧开始解码,这就导致了短暂的抖动和卡顿。

下面给你几个不用重新编码就能解决的办法,亲测有效:

1. 先定位关键帧,调整切割点到关键帧位置

首先得找出视频里所有关键帧的时间点,用这条命令:

ffmpeg -i video.mp4 -vf "showinfo" -f null - 2>&1 | grep -E "key_frame:1|pts_time"

运行后你会看到一堆输出,找到key_frame:1对应的pts_time值,比如找刚好小于等于60秒的关键帧时间(比如58.2秒),以及刚好大于等于200秒的关键帧时间(比如201.5秒)。

然后修改你的input.txt,把切割点换成这些关键帧时间:

file video.mp4
outpoint 58.2
file video.mp4
inpoint 201.5

2. 加上时间戳修正参数

在concat命令里加上-avoid_negative_ts make_zero,这个参数能帮你修正拼接后的视频时间戳,避免播放器因为时间戳不连续出现卡顿。最终命令变成:

ffmpeg -f concat -i input.txt -c copy -avoid_negative_ts make_zero output.mp4

3. 先单独提取片段再拼接(备选方案)

如果上面的方法还是不行,可以先把两段视频单独提取出来,再拼接,这样能规避一些容器元数据的问题:

  • 提取前半段:
ffmpeg -i video.mp4 -t 58.2 -c copy part1.mp4
  • 提取后半段:
ffmpeg -i video.mp4 -ss 201.5 -c copy part2.mp4
  • 新建一个parts.txt,内容如下:
file part1.mp4
file part2.mp4
  • 最后拼接:
ffmpeg -f concat -i parts.txt -c copy -avoid_negative_ts make_zero output.mp4

这些方法全程都是直接复制视频流,完全不会重新编码,速度快还能保证画质不变,应该能解决你的卡顿问题!

备注:内容来源于stack exchange,提问作者Mohammad Mansour

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 12:20:30