您的位置:首页 > 其它

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

2015-01-15 12:17 260 查看
文章地址:/article/8480773.html

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

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

谢谢版主!我在附录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] [/size]


在DVB系统里面,数字广播的流里面一般都是有VUI信息的。如果是存储格式的话,一般容器里面会有这样的信息。

explorer_djz 发表于 2009-3-7 08:44 PM

哦,差不多明白了。

谢谢楼上各位

对于帧历时(帧率)总结如下:

1. 有VUI的话,可以解析此字段得到帧率(从而得到帧历时),这个得到的是平均帧率

2.无VUI,那么帧历时可以从封装容器的时间标签得到(比如TS流的PTS)

hero06 发表于 2010-4-30 02:37 PM

6# explorer_djz

谢谢

alexhak2004 发表于 2010-4-30 11:16 PM

一般来讲,pts只是该容器中第一帧的显示时间,而容器中可能不止一帧,后续帧的显示仍然要靠帧率的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: