使用 AForge ffmpeg 包装器,您可以使用 VideoFileReader 类从视频中提取帧并将其保存为位图。
请参阅以下示例:提取 .avi 文件的帧 https://stackoverflow.com/questions/17825677/extracting-frames-of-a-avi-file
我的问题是你无法指定从哪里开始读取帧。它始终从视频文件的开头开始。
但是,如果我想提取两个小时长的视频文件中间的帧该怎么办?使用该类,您必须解析整个第一个小时才能到达这些帧。
有谁知道如何实现这一目标?
如果您知道要从视频中的哪个位置开始阅读,只需跳过适当数量的帧即可;无需处理其中任何一个。
当然,这是假设您知道要开始读取的确切帧号,您可以通过将帧速率乘以要执行提取的时间来计算该帧号。在您的示例中,如果视频长两个小时并且您想从中间提取帧......
VideoFileReader reader = new VideoFileReader();
reader.Open("file.avi");
// Jump to 1 hour into the video
int framesToSkip = reader.FrameRate * 3600; // 1 hour = 3600 seconds
for (int i = 0; i < framesToSkip; i++)
reader.ReadVideoFrame();
// Now the next time ReadVideoFrame() is called, we will get the frame at the 1 hour mark
这假设.FrameRate
属性返回以每秒帧数为单位的值。不幸的是文档 http://www.aforgenet.com/framework/docs/没有说,所以我不确定它如何处理具有非整数帧速率的视频文件(即 29.97 是常见的帧速率。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)