如何从MP4视频中提取MDAT原子并解码帧

7
我是新手,正在学习视频编解码和视频文件格式规范。我已经从这里阅读了有关QUICKTIME文件格式规范的内容,以及从这里阅读了MP4文件格式(几乎相同)的内容。其中包含诸如FTYPE、MOOV、MDAT等原子。MDAT原子包含实际的音频和视频数据。MOOV原子包含有关如何从MDAT中提取数据的信息,它提供了对块(样本)的引用。
我想从视频文件中提取MDAT原子中的视频样本,而不使用任何工具(如ffmpeg或juggler)。我可以自己编写代码来完成此操作。问题在于,即使我可以使用MOOV中的信息定位MDAT中的视频数据(样本),但这些样本是经过压缩的。我们需要对其进行解压缩才能获得帧。
我的问题是是否可以解压缩从MDAT中提取的样本并获取实际的视频帧?
工具如xuggler、ffmpeg等用于从视频文件中提取帧。但在这里,我想通过编写自己的代码从MDAT中提取样本(用于视频数据),然后使用某些工具对其进行解压缩。我不想编写编解码器。
请问有谁可以帮助我吗……!
谢谢……

要解压缩编码帧,您需要一个解码器。编解码器代表编码器-解码器,因此是的,您确实需要一个编解码器,可以是现有的或自己创建的。 - Gyan
@Mulvya 您说得对,我需要一个解码器。我想使用现有的解码器。但问题是,我想通过编写自己的代码从MDAT中提取视频数据样本,然后使用某些工具解码这些样本。在MP4格式中,帧存储在样本中,样本分组在块中。因此,我想自己提取这些块,然后使用某些工具解码这些块。谢谢回复。 - Gurinderbeer Singh
这可以通过使用像这样的命令在FFmpeg中完成:ffmpeg -ss 3.00 -i input.mp4 -c copy -vframes 1 -map 0:v:0 -f data 1.bin <-- 这会转储整个数据包。 - Gyan
1个回答

3

FFmpeg是一组库。libavformat用于读写文件(您在自己的代码中所做的),libavcodec可以单独用于解码样本。


这是很好的信息。所以libavcodec解码样本。在样本解码中是否存在依赖关系。我的意思是,例如我们有1000个样本,libavcodec能够独立地解码这些样本吗?如果我只想解码第500个样本,我能否在不使用其他样本的情况下完成解码? - Gurinderbeer Singh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接