【问题标题】:converting .mov file to .h264 file将 .mov 文件转换为 .h264 文件
【发布时间】:2011-11-03 14:56:09
【问题描述】:

好的,就是这样,我实际上想从 mov 文件中解析帧。获取编码的 h264 帧。我已经通过使用 ffmpeg 设法做到了,但是当我尝试使用ffmpeg -i test* test.mov 再次制作电影时,我得到了test00: Invalid data found when processing input,所以帧的结构有些不正确。据我了解,框架应具有以下外观:

00 00 00 01 XX 数据 -------------

其中 XX 表示它是 I-、P- 还是 B- 帧。或更具体地说,type(XX) = 0x0F && XX 表示它是 I(type(XX) = 5?),P(type(XX) = 7?) 还是 B(type(XX) = 8?) 帧。我不确定这些数字,我一直在寻找它,但没有找到好的来源。所以这是第一个问题,不同帧的 NALU 应该是多少?

无论如何,当我在 mov 文件上使用 av_read_frame 时,我得到的帧看起来像这样:

4B = 大小,1B = XX,然后是数据。 (至少这是我认为我得到的)

当我在十六进制编辑器中查看它们时,我存储框架的文件总是 size 长(当然,否则也是如此)。并且 XX 在第一帧中始终为 65(即 type(XX) = 5),然后在几帧中为 61(即 type(XX) = 1),然后在一帧中返回为 65,依此类推。

我猜这些帧是这样的:I P P P P P P I P P P P P P P I P P P P P P P .... 但是,我对不同帧类型的类型编号的假设是错误的,这很有可能。 (关于阅读这方面的任何建议?除了 ISO/IEC 14496-10,我真的不明白)。

我尝试删除大小并在 XX 字节和数据之前附加 00 00 00 01 但没有成功。关于如何将帧修改为有效的 H264 编码帧的任何提示?

【问题讨论】:

    标签: parsing encoding ffmpeg h.264 decoding


    【解决方案1】:

    首先,我必须推荐一个理解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 来实现什么。

    【讨论】:

    • +1。另外,我认为可能需要选项 -vbsf h264_mp4toannexb 来提取实际的附件 B 流。
    • 感谢 Alex 和 @misha 的回复。我知道这个解决方案,但问题是我无法及时完成,因为我正在 iphone 上实际提取帧,我需要一种方法在代码中完全做到这一点。有什么建议从哪里开始?这样做的原因是因为我需要通过 Web 服务器将 h264 帧流式传输到外部框架,以便进一步处理帧。
    • 从 ffmpeg 源码开始。一切尽在眼前。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 2013-09-29
    • 2015-06-28
    • 2019-02-08
    • 1970-01-01
    相关资源
    最近更新 更多