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

如何用FFmpeg获取视频平均码率与峰值码率及码率计算疑问

如何用FFmpeg获取视频的平均码率与峰值码率?附码率计算不符的解惑

一、正确获取平均码率的方法

FFmpeg配套的ffprobe工具是精准获取码率的首选,推荐两种方式:

  • 直接提取视频流平均码率:避免音频、字幕等其他流干扰,直接输出视频流的统计平均码率(CBR编码时与标称码率一致,VBR编码时为实际平均):
    ffprobe -v error -select_streams v:0 -show_entries stream=bit_rate -of default=noprint_wrappers=1:nokey=1 input.mp4
    
    输出结果单位为bps,除以1000即可得到常用的kb/s单位。
  • 手动验证视频流平均码率:如果想自己计算,先提取视频流单独的大小,再结合时长计算:
    1. 提取视频流大小:
      ffprobe -v error -select_streams v:0 -show_entries stream=size -of default=noprint_wrappers=1:nokey=1 input.mp4
      
    2. 套用公式:(视频流大小 × 8) / 视频时长 = 平均码率(bps),除以1000转换为kb/s。

二、获取峰值码率的方法

FFmpeg没有直接输出峰值码率的命令,但可以通过帧级分析计算:

  1. 提取所有视频帧的数据包大小(单位:字节):
    ffprobe -v error -select_streams v:0 -show_entries frame=pkt_size -of csv=p=0 input.mp4
    
  2. 结合帧率计算单帧码率:比如帧率为30fps,每帧间隔是1/30秒,单帧码率公式为 (帧大小 × 8) / (1/帧率)(单位:bps),找出所有帧码率的最大值就是峰值码率。
    另外,也可以用转码命令间接参考峰值:
ffmpeg -i input.mp4 -f null -

执行结束后,最后一行输出的bitrate=xxx kbits/s是处理过程中的实时码率峰值参考,虽不如帧分析精准,但足够快速判断。

三、你的码率计算不符问题解惑

你之前的计算犯了一个常见的细节错误:混淆了字节(Byte)和比特(Bit)的转换关系!

  1. 正确的总码率(包含视频+音频+容器元数据)计算公式是:
    总码率(kb/s)= (文件总大小 × 8) / 时长 / 1000
    
    代入你的数据:(114915563 × 8) / 179 / 1000 ≈ 5136 kb/s
  2. 而ffmpeg -i显示的4997 kb/s是视频流单独的码率,剩下的5136 - 4997 ≈ 139 kb/s是音频流+容器元数据的码率,完全匹配逻辑。
  3. 你之前直接用文件大小/时长得到字节每秒,却误当成了kb/s,忘记乘以8(1字节=8比特),导致数值差了8倍,才出现642kb/s与4997kb/s的巨大差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:21:18