C++ 使用c++;

C++ 使用c++;,c++,visual-studio,opencv,ffmpeg,directshow,C++,Visual Studio,Opencv,Ffmpeg,Directshow,我正在寻找一种快速加载视频文件的方法,并以一定的间隔(每秒、每分钟、每小时等)从中创建图像 我尝试使用DirectShow,但它运行太慢,无法启动视频文件并移动到某个位置以获取数据并将其保存到图像中。即使我禁用了基准时钟。尝试了OpenCV,但在打开AVI文件时遇到问题,除非我知道确切的编解码器信息。因此,如果我知道一种从OpenCV获取编解码器信息的方法,我可能会再尝试一次。我试着使用FFMPEG,但我并没有像我希望的那样控制它 如有任何建议,将不胜感激。这是在Windows box上开发的,

我正在寻找一种快速加载视频文件的方法,并以一定的间隔(每秒、每分钟、每小时等)从中创建图像

我尝试使用DirectShow,但它运行太慢,无法启动视频文件并移动到某个位置以获取数据并将其保存到图像中。即使我禁用了基准时钟。尝试了OpenCV,但在打开AVI文件时遇到问题,除非我知道确切的编解码器信息。因此,如果我知道一种从OpenCV获取编解码器信息的方法,我可能会再尝试一次。我试着使用FFMPEG,但我并没有像我希望的那样控制它


如有任何建议,将不胜感激。这是在Windows box上开发的,因为它必须托管在Windows box上。

MPEG-4格式不是帧内编码格式,因此您不能直接跳转到随机帧并自行解码,因为大多数帧只编码与一个或多个其他帧的差异。我怀疑您的解码速度很慢,因为当您在一个帧上着陆时,其他几个相关帧将首先被解码

提高性能的一种方法是确定哪些帧是关键帧(有时也称为“同步”点),并将解码限制在这些帧上,因为这些帧可以自行解码

我不太熟悉DirectShow的功能,但我希望它有一些API来公开同步点


另外,我应该提到Windows上的QuickTime SDK可能是解码电影帧的另一个好选择。您应该首先测试您的AVI电影是否在QuickTime播放器中正确播放。QT SDK确实公开了同步点,请参阅QT SDK文档中的部分。

MPEG-4格式不是内部编码格式,因此您不能直接跳转到随机帧并自行解码,因为大多数帧只编码与一个或多个其他帧的差异。我怀疑您的解码速度很慢,因为当您在一个帧上着陆时,其他几个相关帧将首先被解码

提高性能的一种方法是确定哪些帧是关键帧(有时也称为“同步”点),并将解码限制在这些帧上,因为这些帧可以自行解码

我不太熟悉DirectShow的功能,但我希望它有一些API来公开同步点



另外,我应该提到Windows上的QuickTime SDK可能是解码电影帧的另一个好选择。您应该首先测试您的AVI电影是否在QuickTime播放器中正确播放。QT SDK确实公开了同步点,请参阅QT SDK文档中的部分。

ffmpeg的libavformat可能适用于ya…

ffmpeg的libavformat可能适用于ya…

什么文件格式和什么编解码器?如果是WMV,您可以使用Windows Media Format SDK。大多数视频都是使用MPEG-4格式的AVI。虽然我们有一些FLV文件,但AVI只是位图的集合。您可以在播放过程中屏蔽cap和bitblt,也可以找到一个可以为您提取帧的库。OpenCV本身使用DirectShow或FFMPEG读取视频,因此与它们相比,它不会给您任何加速。@AJG85-不完全正确。传统上,AVI是无压缩文件(bmps)。但该文件格式可扩展为承载来自流式编解码器的视频。在Seb的例子中,他有MPEG视频的AVI文件。什么文件格式和什么编解码器?如果是WMV,您可以使用Windows Media Format SDK。大多数视频都是使用MPEG-4格式的AVI。虽然我们有一些FLV文件,但AVI只是位图的集合。您可以在播放过程中屏蔽cap和bitblt,也可以找到一个可以为您提取帧的库。OpenCV本身使用DirectShow或FFMPEG读取视频,因此与它们相比,它不会给您任何加速。@AJG85-不完全正确。传统上,AVI是无压缩文件(bmps)。但该文件格式可扩展为承载来自流式编解码器的视频。在Seb的例子中,他有MPEG视频的AVI文件。我如何使用它来获得所需的每个指定帧?比如说,如果我需要每秒钟或每30秒为每一帧制作一张图像,这很棘手。您需要找到离目标帧最近的关键帧。你可能必须决定离目标有多远,如果最近的关键帧太远,你可能别无选择,只能以更高的成本解码目标帧。我已经使用了QT SDK,但它没有得到我想要的结果。我主要是尝试创建一个在后台运行的控制台应用程序,我在网上找到的唯一示例就是创建一个windows应用程序。有没有什么方法可以“伪造”渲染,这样我就可以处理视频了?看看这个示例应用程序:谢谢你的帮助。这似乎很好地满足了我的需要。我如何使用它来获得所需的每个指定帧?比如说,如果我需要每秒钟或每30秒为每一帧制作一张图像,这很棘手。您需要找到离目标帧最近的关键帧。你可能必须决定离目标有多远,如果最近的关键帧太远,你可能别无选择,只能以更高的成本解码目标帧。我已经使用了QT SDK,但它没有得到我想要的结果。我主要是尝试创建一个在后台运行的控制台应用程序,我在网上找到的唯一示例就是创建一个windows应用程序。有没有什么方法可以“伪造”渲染,这样我就可以处理视频了?看看这个示例应用程序:谢谢你的帮助。这似乎对我所需要的相当有效。