我正在开发一个 C# 工具来将 mp4 帧提取到图像中。(不使用ffmpeg)
我使用了一个名为 ISO Viewer 2.0.2 的工具,我在 Tracks 选项卡中看到了我所有的 mp4 视频帧(5 秒 145 帧,每帧称为样本)。
在每个帧/样本上,我可以获得数据字节 []。那么它如何将这些数据转换为 C# 中的图像呢?
我正在开发一个 C# 工具来将 mp4 帧提取到图像中。(不使用ffmpeg)
我使用了一个名为 ISO Viewer 2.0.2 的工具,我在 Tracks 选项卡中看到了我所有的 mp4 视频帧(5 秒 145 帧,每帧称为样本)。
在每个帧/样本上,我可以获得数据字节 []。那么它如何将这些数据转换为 C# 中的图像呢?
您很可能希望使用一些库来执行此操作。如果您打算自己执行此操作,这可能会变得非常复杂。我将尝试通过列出执行此操作所需的步骤来进行说明。
首先,您需要弄清楚 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)。