好的,就是这种情况,我实际上想要从mov文件中解析帧。获取编码的h264帧。并且我已经设法通过使用ffmpeg这样做但当我尝试使用ffmpeg -i test* test.mov
再次制作电影时我得到test00: Invalid data found when processing input
所以有一些不正确的帧结构。据我所知,一个框架应具有以下外观:
其中XX表示它是I帧,P帧还是B帧。或更具体地type(XX) = 0x0F && XX
表示如果是I(类型(XX)= 5?),P(类型(XX)= 7?)或B(类型(XX)= 8?)帧。我不确定这些数字,我一直在寻找它,但没有找到好的来源。所以这是第一个问题,NALU对于不同的帧应该是多少?
无论如何,当我在mov文件上使用av_read_frame时,我得到的帧看起来像这样:
4B =尺寸,1B = XX然后是数据。 (至少这是我认为的)
当我在hexeditor中查看时,我存储帧的文件总是 size 长(当然也是如此)。并且XX在第一个中始终为65(即,类型(XX)= 5),然后是61(即,类型(XX)= 1),对于一帧,然后返回到65为一帧,依此类推。 / p>
我猜这些帧是这样的:I P P P P P P P P P P P P P P P P P P P P P ....但是我对不同帧类型的类型编号的假设是错误的,这很有可能。 (关于这个的任何建议?除了ISO / IEC 14496-10,我真的不明白)。
我试图删除大小并在XX字节和数据之前附加00 00 00 01但没有成功。关于如何将帧修改为有效的H264编码帧的任何提示?
答案 0 :(得分:5)
首先,我必须推荐一个很好的工具来理解H264流:http://sourceforge.net/projects/h264bitstream/
不,要回答您的具体问题,是的,帧通常以65和61开头。通常以67和68开头的特殊NAL单元分别是SPS(序列参数集)和PPS(图片参数集)
我还建议您尝试使用ffmpeg -i input.mov -vcodec copy output.h264
将附件B流(00 00 00 01)正确地作为单个文件获取。
我无法准确理解你想通过从mov中提取帧并将它们再次放入test.mov来实现的目标。