它没有记录在任何地方作为一般规则,存储可以从其他值计算的值是不好的做法。加上比特率可以随着时间的推移改变相同的视频。您可以做的是将您感兴趣的帧的大小加到stsz框中(原子在iso标准中称为框),以及从stts框到数学的样本持续时间。
如果您可以阅读信息值(您已经获得了szatmary的答案以获得更准确的信息),shell会通过解析文件并通过Media Foundation MPEG-4 Property Handler类读取元数据来报告此情况。
本机API入口点是 PSLookupPropertyHandlerCLSID 然后定期进行COM实例化 IPropertyStore 接口然后读取属性。即使您没有C#接口,也可以通过P / Invoke和互操作性层轻松实现。
PSLookupPropertyHandlerCLSID
IPropertyStore
这个帮助器应用程序很容易发现这种方式可以读取的属性,包装API: FilePropertyStore ( Win32 , x64 )。也就是说,您通过应用程序看到的内容也可通过上述API获得。
FilePropertyStore
Win32
x64
以下摘录自.MOV文件的内容(注意 PKEY_Audio_EncodingBitrate 和 PKEY_Video_EncodingBitrate ):
PKEY_Audio_EncodingBitrate
PKEY_Video_EncodingBitrate
## Property * `PKEY_Media_Duration`, Length: `855000000` (`VT_UI8`) // `855,000,000` * `PKEY_Audio_EncodingBitrate`, Bit rate: `43744` (`VT_UI4`) // `43,744` * `PKEY_Audio_ChannelCount`, Channels: `1` (`VT_UI4`) // `1` * `PKEY_Audio_Format`, Audio format: `{00001610-0000-0010-8000-00AA00389B71}` (`VT_LPWSTR`) // FourCC 0x00001610 * `PKEY_Audio_SampleRate`, Audio sample rate: `32000` (`VT_UI4`) // `32,000` * `PKEY_Audio_SampleSize`, Audio sample size: `16` (`VT_UI4`) // `16` * `PKEY_Audio_StreamNumber`: `1` (`VT_UI4`) // `1` * `PKEY_Video_EncodingBitrate`, Data rate: `263352` (`VT_UI4`) // `263,352` * `PKEY_Video_FrameWidth`, Frame width: `640` (`VT_UI4`) // `640` * `PKEY_Video_FrameHeight`, Frame height: `480` (`VT_UI4`) // `480`
该方法也适用于其他媒体文件格式,通过相应的属性处理程序为其他容器格式使用相同的密钥获取数据。