我正在尝试使用 ffmpeg 命令确定视频比特率(用于转码),我尝试了以下命令。
ffmpeg -i 28572615.wmv
并产生以下输出
Input #0, asf, from '28572615.wmv':
Metadata:
major_brand : isom
minor_version : 1
compatible_brands: isomavc1
encoder : Lavf57.36.100
Duration: 00:02:50.92, start: 0.000000, bitrate: 1982 kb/s
Stream #0:0: Video: wmv2 (WMV2 / 0x32564D57), yuv420p, 640x360, SAR 1:1 DAR 16:9, 25 fps, 25 tbr, 1k tbn, 1k tbc
Stream #0:1: Audio: wmav2 (a[1][0][0] / 0x0161), 44100 Hz, 2 channels, fltp, 128 kb/s
At least one output file must be specified
如果我使用另一个视频
ffmpeg -i with_out_sound.mp4
然后我得到以下输出
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'with_out_sound.mp4':
Metadata:
major_brand : dash
minor_version : 0
compatible_brands: iso6avc1mp41
creation_time : 2015-04-21 05:14:57
Duration: 00:00:27.86, start: 0.000000, bitrate: 500 kb/s
Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 622x480 [SAR 1:1 DAR 311:240], 100 kb/s, 23.98 fps, 23.98 tbr, 90k tbn, 47.95 tbc (default)
Metadata:
creation_time : 2015-04-21 05:14:57
handler_name : VideoHandler
At least one output file must be specified
我困惑的一点是,我应该在持续时间元数据行还是视频流元数据行(流#0:0)中查找视频比特率?
答案1
视频比特率显示在视频流信息中。格式信息包含所有流的比特率加上复用开销。
如果缺少视频比特率,那么获取该值的一种不正规的方法是从总比特率中减去所有其他流的比特率。
如果这不可行,请运行 ffprobe 来显示数据包大小并将它们加在一起,显示流持续时间,然后通过将第一个数字除以第二个数字来计算比特率。
$ ffprobe -v quiet -select_streams v -show_entries packet=size -of compact=p=0:nk=1 video.ext | awk '{s+=$1} END {print s}'
496797924
$ ffprobe -v quiet -select_streams v -show_entries stream=duration -of compact=p=0:nk=1 video.mp4 # format=duration if MKV
1501.761000
$ echo 496797924/1501.761000 | bc # B/s
330810
$ echo '496797924/1501.761000/1024' | bc # kB/s
323
当然,这仅适用于视频流信息不带比特率的情况,并且也不可能通过降低所有其他流的速率来估算比特率。
答案2
编辑:如果你有MKV 视频而不是 MP4。
获取正确格式的视频比特率的最简单方法是使用 FFMPEG 的实用程序ffprobe
$ ffprobe -v quiet -select_streams v:0 -show_entries stream=bit_rate -of default=noprint_wrappers=1:nokey=1 inputvideo.mp4
这会单独打印原始比特率值,以便您可以轻松地在某种脚本中使用它。
摘自这里:https://write.corbpie.com/getting-video-bitrate-with-ffprobe/