如何获取h.264码流的码率和帧率

来源:互联网 发布:淘宝群怎么添加到首页 编辑:程序博客网 时间:2024/04/29 02:35

出售【Windows平台GPU硬解码SDK解码速度提升4倍】


如果是对一个码流文件计算码率,那么先解码得到总帧数,然后看文件有多大。这样,有了总比特数(即文件大小)、总帧数和帧率,就可以算码率了。

H.264码流中一般没有帧率,比特率信息到使可以得到,你参考吗流语法,
但是有的吗流有VUI信息,他里面有个标志 timing_info_present_flag 若等于1,则码流中有num_units_in_tick 和 time_scale。
framerate = time_scale/num_units_in_tick.

请问:h.264 的 framerate 应该怎样获取?
[i=s] 本帖最后由 explorer_djz 于 2009-2-24 10:38 PM 编辑 [/i]

h.264 的 framerate 应该怎样获取?需要用到哪些 NAL 单元来完成?

一个 seqence 中 framerate 允许变化吗?

实时播放器播放时,会用到 framerate ?如果不用,播放器通过什么来判断一秒钟播放多少帧?

firstime 发表于 2009-2-24 11:31 PM
1、你看看 2005 版标准的附录 D 和 E,那里面可能有帧率信息,我不确定;
2、一般来说一个应用的帧率是不需要发生变化的。当然可以允许变化;
3、视频文件中有一些额外的信息,通过这些信息播放器可以算出播放速度。这些信息是封装视频文件的时候按照相应的文件格式协议产生的。例如 3GPP 是按照 ISO_IEC_14496-12 封装而成的。

explorer_djz 发表于 2009-3-3 08:51 PM
谢谢版主!我在附录E 中确实找到了能算帧率的。如下:(中文版标准P320)
VUI 信息中有个标志 timing_info_present_flag 若等于1,则码流中有num_units_in_tick 和 time_scale。
framerate = time_scale/num_units_in_tick.
还有2个问题:
1. VUI信息是可选项,若只有一段 ES 流,且没有VUI信息,那是不是就没法得到帧率信息了?在复用时就只能猜了吗?
2. 还是没有 VUI 信息的 ES 流,elecard streameye 分析后,framerate declared=0, 而 real =  (var) 25.16,streameye 是怎么得到 real framerate 的?

firstime 发表于 2009-3-3 09:05 PM
1、没有 VUI,就没有帧率信息。既然是你在做复用,那么你一定知道帧率;
2、ES 没有帧率信息,直接按正常速度显示就可以了。

dcfarmer 发表于 2009-3-3 10:48 PM
[quote]谢谢版主!我在附录E 中确实找到了能算帧率的。如下:(中文版标准P320)
VUI 信息中有个标志 timing_info_present_flag 若等于1,则码流中有num_units_in_tick 和 time_scale。
framerate = time_scale/num_unit ...
[size=2][color=#999999]explorer_djz 发表于 2009-3-3 08:51 PM[/color] [url=http://bbs.chinavideo.org/redirect.php?goto=findpost&pid=18534&ptid=5256][img]http://bbs.chinavideo.org/images/common/back.gif[/img][/url][/size][/quote]
在DVB系统里面,数字广播的流里面一般都是有VUI信息的。如果是存储格式的话,一般容器里面会有这样的信息。

explorer_djz 发表于 2009-3-7 08:44 PM
哦,差不多明白了。
谢谢楼上各位

对于帧历时(帧率)总结如下:
1. 有VUI的话,可以解析此字段得到帧率(从而得到帧历时),这个得到的是平均帧率
2.无VUI,那么帧历时可以从封装容器的时间标签得到(比如TS流的PTS)

hero06 发表于 2010-4-30 02:37 PM
[b] [url=http://bbs.chinavideo.org/redirect.php?goto=findpost&pid=18725&ptid=5256]6#[/url] [i]explorer_djz[/i] [/b]

谢谢

alexhak2004 发表于 2010-4-30 11:16 PM
一般来讲,pts只是该容器中第一帧的显示时间,而容器中可能不止一帧,后续帧的显示仍然要靠帧率的