小编buk*_*jot的帖子

h264内置AVI,MP4和"Raw"h264流.不同格式的NAL单位(或ffmpeg bug)

TL; DR:我想从AVI/MP4文件读取原始的h264流,甚至是破坏/不完整的.

几乎所有关于h264的文档都告诉我它包含NAL数据包.好的.几乎每个地方都告诉我,数据包应该以像00 00 01或者签名开头00 00 00 01.例如,https://stackoverflow.com/a/18638298/8167678,/sf/answers/1233787621/

H.264的格式是它由NAL单元组成,每个NAL单元的起始前缀为三个字节,值为0x00,0x00,0x01,每个单元的类型不同,具体取决于这些后面的第4个字节的值. 3个起始字节.一个NAL单元不是视频中的一个帧,每个帧由许多NAL单元组成.

好的.

我下载了random_youtube_video.mp4并从中删除了一帧:

ffmpeg -ss 10 -i random_youtube_video.mp4 -frames 1 -c copy pic.avi

得到了: AVI的hexdump 红色部分 - 这是AVI容器的一部分,其他 - 实际数据.正如你所看到的,我在这里00 00 24 A9而不是00 00 00 01

这个AVI文件播放完美

我为mp4容器做同样的事情: mp4的hexdump

如您所见,这里完全相同的字节. 这个MP4文件播放完美

我试图删除原始数据: ffmpeg -i pic.avi -c copy pic.h264 原始数据

此文件无法在VLC中播放,甚至生成此文件的ffmpeg也无法解析它: ffmpeg错误

我下载了mp4流分析器,得到了: 分析

MP4Box 告诉我:

 Cannot find H264 start code
 Error importing pic.h264: BitStream Not Compliant
Run Code Online (Sandbox Code Playgroud)

当没有任何作用时,很难学习h264的内部结构.

所以,我有疑问:

  1. mp4里面的实际数据是什么?
  2. 我必须阅读解码数据(我的意思是不同的附件)
  3. 如何从这个"破碎的"原始流中读取流并获取解码图像(即使使用ffmpeg)?

更新:

这似乎是ffmpeg中的bug:

当我进行双重转换时: …

c video specifications ffmpeg h.264

6
推荐指数
1
解决办法
4718
查看次数

标签 统计

c ×1

ffmpeg ×1

h.264 ×1

specifications ×1

video ×1