织梦CMS - 轻松建站从此开始!

罗索

关于mpeg-2 纯视频流的长度问题,很奇怪。

jackyhwei 发布于 2010-01-24 01:00 点击:次 
这是一个刚认识的朋友发过来的,我对MPEG2也不是很了解,但他碰到的一个问题从现象上跟我一个未解决的问题非常象,在经过一番讨论后,现已确定是两回事情,留下此文作日后可能参考。
TAG:

原讨论链接:http://community.csdn.net/expert/topicview1.asp?id=4395622
 

我有一个mpeg-2格式的视频文件(纯es流的视频),NTSC制式,我数出来的视频帧一共为31358帧,折合时间为1046秒。
但我用播放器播放的时候,播放器表示这段素材是1307秒,我也明确知道这段素材是1307秒。数出来的帧数怎么和实际长度不一致呢?

 帧数/帧率 != 播放时间  ???

ps:数的帧数绝对没问题。播放的实际时间也对的。但计算的时间和实际时间不能吻合,而且相差太远了

---------------------------------------------------------------

你要看是设定的帧率还是实际帧率。
"帧数/帧率 == 播放时间"中的帧率应该是实际帧率

实际中设定帧率经常不等于实际的帧率。
这样就是出现了你的那种情况罗!

楼主可以在GraphEdit中播放这个文件,在Render Filter就能看到它的实际帧率了!
---------------------------------------------------------------

根据repeat_first_field 和top_field_first两个字段,有些frame可不是只播放一次的。具体算法要参考一下iso 13818-2了。

----------------------------------------------------------------
ablewindy(我是【风子】我怕谁) ( ) 
实际帧率我是从码流里的sequcence分析得到的
下面是它的部分序列数据
00 00 01 B3 2D 01 E0 34 12 11 23 82 ... ...
注意第8个字节为0x34,相应的帧率表示为 0100(2进制),根据13818-2,可以得到为29.97帧/秒

Bill1212(Bill) ( ) 
对于重复播出的情况我也考虑了,但查看他的扩展序列中的progressive_sequence字段均为0,所以也不符合重复输出重构帧的条件。

------------------------------------------------------------
不过我有个想法,但没得到证实。
这个m2v文件是我重dvd碟片上的vob文件里分离得到。考虑dvd的播放应该是以电影的方式播放,电影的帧率为24帧/秒,如果按照这个帧率来计算,与实际情况很符合。

to:ablewindy(我是【风子】我怕谁) ( ) 
用GraphEdit播放,从render里可以看到帧率是24帧,但很奇怪,明明码流里写的是29.97,为什么播放以24帧的速度来呢?

-------------------------------------------------
问题解决。查看标准后,发现确实有重复播出的情况。

现总结如下
在视频序列扩展里有progressive_sequence,
当progressive_sequence=1,表示后面的视频为逐行的帧图
  progressive_sequence=0,表示后面的视频可以为场图,也可为帧图,帧图可以为逐行或隔行


在每图象扩展里有3个字段与图象的显示时间有关系。
分别为top_field_first
repeat_first_field
progressive_frame


这里讲的帧包含2场,比如以25帧/秒的速率播放,实际上为50场/秒
if (progressive_sequence==1)
{
输出帧的2场为逐行
//重构帧的输出次数=top_field_first+repeat_first_field+1,最大重复输出次数为3
}
else
{
if (progressive_frame==1)
{
输出帧的2场为逐行
if (repeat_first_field=1)
{
输出3场,其中有一场为重复输出
}
else
{
输出2场
}
}
else
{
输出帧的2场为隔行
}
}
对于从dvd里得到的视频序列,码流里明确表示播放帧率为29.97,但实际播放的帧率为24帧,因为码流中有重复播出的情况。
我的m2v素材就是从dvd上分离得到,一共在码流中数到帧数为31358,但如果算上重复输出那么应该为39155,实际的播放时间就是39155/29.97=1306.5秒,和实际很符合。

(Bill1212)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201001/8368.html]
本文出处:CSDN.NET 作者:Bill1212
顶一下
(0)
0%
踩一下
(1)
100%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容