parsing - 将 .mov 文件转换为 .h264 文件

标签 parsing encoding ffmpeg h.264 decoding

好的,就是这样,我实际上想从 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,然后是数据。 (至少这是我认为我得到的)

当我在十六进制编辑器中查看它们时,我存储帧的文件总是很长(当然,否则也是如此)。并且 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 ...但是我对不同帧类型的类型编号的假设是错误的,这很有可能。 (关于阅读这方面的任何建议?除了 ISO/IEC 14496-10,我真的不明白)。

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

最佳答案

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

关于parsing - 将 .mov 文件转换为 .h264 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7189757/

相关文章:

video - 使用 FFmpeg 从单独的视频生成带有 alpha channel 的电影并填充电影?

c++ - 如何使用编码的 AAC 数据手动创建 AVPacket 以发送 mpegts?

parsing - 使用 Ocaml Opal 的递归 Lisp 解析器

python - 在Python中解码JSON

java - 使用正则表达式解析地址

c# - 使用 webclient 时出现乱码而不是希伯来语

python - 解密后的明文前面的b在pycrypto中是什么意思?

c# - 如何从托管字节 [] 缓冲区获取字节**

c++ - 将二进制文件拆分为 block c++

java - while 循环不正确地解析 Double.IsNaN