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

关于使用FFmpeg/ffprobe跨格式提取视频码率及码率准确性的技术咨询

关于使用FFmpeg/ffprobe跨格式提取视频码率及码率准确性的技术咨询

Hey,我来帮你解决这两个问题~

一、跨格式提取视频码率的解决方法

你用的ffprobe -i /test_b200.webm -v quiet -select_streams v:0 -show_entries stream=bit_rate -of default=noprint_wrappers=1:nokey=1命令在MP4上生效,但WebM不行,大概率是因为多数WebM文件采用**可变码率(VBR)**编码,这类文件的容器中往往不会直接存储stream层级的bit_rate字段,所以拿不到值。

不过有两种通用方案,几乎支持所有视频格式:

  • 方案1:计算真实平均码率(最可靠)
    先获取视频的总时长和文件大小,再通过公式计算:
    执行命令:
    ffprobe -i /test_b200.webm -v quiet -show_entries format=duration,size -of default=noprint_wrappers=1:nokey=1
    
    命令会输出两个数值:第一个是视频时长(单位:秒),第二个是文件大小(单位:字节)。用公式 (文件大小 × 8) ÷ 时长 就能得到平均码率(单位:bps)。比如文件大小是1000000字节、时长10秒,计算结果就是(1000000×8)/10=800000 bps(即800 kbps)。这个方法完全不受容器格式限制,只要视频能正常读取就能用。
  • 方案2:尝试从编码流中读取(若存在)
    可以换用JSON格式输出,看看是否存在隐藏的码率信息:
    ffprobe -i /test_b200.webm -v quiet -select_streams v:0 -show_entries stream=bit_rate -of json
    
    如果返回的JSON中包含bit_rate字段,就能直接取用;如果还是没有,就用方案1即可。

另外,你不用怀疑是WebM转换出错——只要视频能正常播放,就不是转换的问题,只是WebM容器的特性导致部分字段未存储而已。

二、码率的准确性问题

码率的准确性要分两种编码类型来看:

  • 固定码率(CBR):这类视频的码率是编码时就固定的,不管是从ffprobe拿到的bit_rate还是计算出的平均码率,都是准确值。
  • 可变码率(VBR):
    • 若ffprobe能读取到stream层级的bit_rate,这个值一般是编码时设置的目标码率或预估平均码率,属于近似值;
    • 而通过文件大小+时长计算出的平均码率,是基于文件实际总比特数除以总时长得到的真实平均码率,这个值是准确的。

备注:内容来源于stack exchange,提问作者Дмитрий

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 08:43:02