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

如何用FFmpeg压缩视频且不改变帧率与画质,保证时长一致?

如何用FFmpeg压缩视频且保持原时长(不改变帧率)

我看了你的FFmpeg运行日志,发现问题出在帧率处理上:原视频的实际帧率是19.11 fps,但输出时FFmpeg自动用了tbr(平均比特率对应的帧率)16.42 fps,还出现了dup=1 drop=29的帧重复/丢弃操作,这直接导致了视频时长的变化。

要解决这个问题,你需要强制FFmpeg沿用原视频的帧率,同时禁用自动帧同步操作,确保每帧都按原时间戳保留。这里有两种可行的方案:

方案1:手动指定原视频帧率

从你的日志里可以直接拿到原视频帧率是19.11,用这个命令:

ffmpeg -y -i video.mp4 -vcodec libx264 -crf 24 -preset ultrafast -r 19.11 -vsync 0 compressed.mp4

方案2:自动读取原视频帧率(通用版)

如果不想手动查帧率,可以用ffprobe自动获取原视频的帧率,适合批量处理或可变帧率(VFR)视频:

ffmpeg -y -i video.mp4 -vcodec libx264 -crf 24 -preset ultrafast -r $(ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate -of default=noprint_wrappers=1:nokey=1 video.mp4) -vsync 0 compressed.mp4

参数说明

  • -r [帧率值]:强制输出视频使用指定的帧率,和原视频保持一致
  • -vsync 0:禁用帧同步机制,FFmpeg会严格按照输入帧的时间戳处理,不丢弃也不重复任何帧,从根源上避免时长偏差

执行完命令后,你可以检查输出日志里的dup=0 drop=0,这就说明帧没有被修改,压缩后的视频时长会和原视频完全一致。

内容的提问来源于stack exchange,提问作者WebDiva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 12:17:54