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容器的一部分,其他 - 实际数据.正如你所看到的,我在这里00 00 24 A9而不是00 00 00 01
这个AVI文件播放完美
如您所见,这里完全相同的字节. 这个MP4文件播放完美
我试图删除原始数据:
ffmpeg -i pic.avi -c copy pic.h264

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

MP4Box 告诉我:
Cannot find H264 start code
Error importing pic.h264: BitStream Not Compliant
Run Code Online (Sandbox Code Playgroud)
当没有任何作用时,很难学习h264的内部结构.
所以,我有疑问:
更新:
这似乎是ffmpeg中的bug:
当我进行双重转换时: …