将mp4曲目转换为没有ffmpeg的图像

时间:2018-06-30 09:33:45

标签: video-streaming h.264 mp4parser mp4box

我正在开发C#工具以将mp4帧提取到图像中。 (不使用ffmpeg)

我使用一个名为ISO Viewer 2.0.2的工具,并且在“轨道”选项卡中看到了我所有的mp4视频帧(145帧,持续5秒钟,每个帧称为示例)。

ISO Viewer 2.0.2 screen shot

在每个帧/样本上,我都可以得到它的数据字节[]。那么如何将这些数据转换为C#中的图像?

1 个答案:

答案 0 :(得分:1)

您很可能想使用某些库来执行此操作。如果您打算自己做,这可能会变得非常复杂。我将尝试通过列出执行此操作所需的步骤来说明。

  • 首先,您需要确定MP4上使用了哪种视频编解码器。如果幸运的话,它是H.264,但是MP4文件可以包含许多不同的视频编解码器。您可以在此处找到H.264规范:https://www.itu.int/rec/T-REC-H.264-201704-I/en(超过700页)

  • 然后您需要实际使用提取的帧,并根据H.264规范对其进行解码

  • 如果该帧不是I帧,则可能需要查看先前的帧才能对其进行解码。您可能需要查看一个以上的帧。

  • 如果不幸的是,视频中包含B帧,则可能需要查看除先前帧之外的将来帧,以便对其进行解码。

您正在看一个非常大的项目,仅使用H.264文件即可完成此任务,然后该项目仅涵盖了一些MP4文件,而远远没有。使用ffmpeg之类的东西或类似的框架来完成此操作会更好。

如果由于某种原因而无法使用ffmpeg,则可以考虑使用https://msdn.microsoft.com/en-us/library/windows/desktop/dd940436(使用C#意味着您正在使用Windows)。