首页 / 知识
关于Windows:C ++:打开视频文件最简单的库是什么
2023-04-13 20:03:00

C++ : What's the easiest library to open video file我想打开一个小视频文件并映射内存中的每个帧(以应用一些自定义滤镜)。 我不想处理视频编解码器,而是希望库为我自己处理。 我尝试将Direct Show与SampleGrabber过滤器一起使用(使用此示例http://msdn.microsoft.com/zh-cn/library/ms787867(VS.85).aspx),但是我只设法抓取了一些帧 (不是每帧!)。 我在视频软件编程方面还很陌生,也许我没有使用最好的库,或者我做错了。 我已经粘贴了一部分代码(主要是msdn示例中的修改后的复制/粘贴),不幸的是,它没有按预期抓取前25帧...
有没有具有视频软件经验的人可以为我提供有关代码或其他更简单库的建议? 谢谢
编辑: 当前,这些是Win32平台上最流行的视频框架: Windows视频:旧的Windows框架来自Win95时代,但由于使用非常简单而仍被广泛使用。不幸的是,它仅支持已安装正确VFW编解码器的AVI文件。 DirectShow:标准WinXP框架,它基本上可以加载Windows Media Player可以播放的所有格式。相当难用。 Ffmpeg:更确切地说是Ffmpeg开源多媒体实用程序随附的libavcodec和libavformat。它非常强大,即使没有在系统上安装编解码器,也可以读取许多格式(几乎可以用VLC播放的所有内容)。它使用起来非常复杂,但是您总是可以从它附带的ffplay代码或开源软件中的其他实现中获得启发。无论如何,我认为它仍然比DS容易使用(并且速度更快)。它必须由Windows上的MinGW来处理,但是这里对所有步骤都进行了很好的解释(此刻链接已断开,希望不会死)。 QuickTime:Apple框架不是Windows平台的最佳解决方案,因为它需要安装QuickTime应用程序以及每种格式的正确QuickTime编解码器;它不支持多种格式,但是在专业领域却很常见(因此某些编解码器实际上仅用于QuickTime)。实施起来应该不会太困难。 Gstreamer:最新的开源框架。我对此了解不多,我猜想它会覆盖其他一些系统(但我不确定)。
除DirectShow外,所有这些框架都已在OpenCv Highgui中作为后端实现。 Win32 OpenCV的默认框架使用的是VFW(因此只能打开一些AVI文件),如果要使用其他框架,则必须下载CVS而不是官方版本,并且仍然会对代码进行一些修改,但是无论如何太完整了,例如FFMPEG后端不允许在流中查找。 我知道在C ++中获取视频文件的正确细分并自己动手是很诱人的。但是,尽管信息已经存在,但处理此类文件的过程却耗时长,要处理每种文件格式,并使其易于更改以考虑到将来的结构更改,坦率地说,这样做是不值得的。 相反,我推荐ffmpeg。上面提到过,但是说很难,这并不困难。还有比大多数人需要的更多的选择,这使它看起来比实际要困难。对于大多数操作,您可以让ffmpeg自己解决。
例如文件转换 从一开始就确定要在线程或更确切地说是线程库中运行ffmpeg操作。但是,请使用您自己的线程类包装它,以便您可以使用自己的EventAgs和检查线程完成的方法。就像是 :-
这是我的ffmpeg工具类的一小段,该部分收集有关视频的信息。 无论如何,这是使用无窗口ffmpeg的示例。
使用SampleGrabber的"回调"模型可以为您带来更好的结果。请参见Samples \ C ++ \ DirectShow \ Editing \ GrabBitmaps中的示例。 在Samples \ C ++ \ DirectShow \ Filters \ Grabber2 \ grabber_text.txt和readme.txt中也有很多信息。 我已经使用OpenCV加载视频文件并进行处理。它对于许多类型的视频处理(包括那些对计算机视觉有用的视频处理)也非常方便。 如果您的视频仅需要产生一系列图片,则OpenCV是最佳解决方案。如果您愿意进行真实的视频处理,那么ViDeo等于" Visual Audio",则需要跟上" martjno"提供的视频。同样适用于Win7的新Windows解决方案还包括3种新功能: 最后两个是仅供商业使用的解决方案,但第一个是免费的。要编码WMF,您需要安装Windows SDK。 如果是用于AVI文件,我自己会从AVI文件中读取数据并提取帧。现在,使用视频压缩管理器对其进行解压缩。 AVI文件格式非常简单,请参见:http://msdn.microsoft.com/zh-cn/library/dd318187(VS.85).aspx(并使用google)。 打开文件后,只需提取每个帧并将其传递给ICDecompress()对其进行解压缩。 似乎需要做很多工作,但这是最可靠的方法。 如果工作量太大,或者您想要的不是AVI文件,请使用ffmpeg。 尝试使用OpenCV库。它绝对具有您需要的功能。 本指南包含有关从视频文件访问帧的部分。 |
最新内容
相关内容
linux改文件权限命令?
linux改文件权限命令?,系统,工具,档案,权限,文件,信息,命令,目录,选项,用户,在linux系统中修改文件权限使用的命令是在 Linux 中,要更改一个文linux命令简写自定义?
linux命令简写自定义?,系统,状态,命令,代码,工具,发行,标准,软件,文件,别名,Linux:Python编写Linux自定义命令工具1、首先我们先认识一下cat指linux命令交换文件名?
linux命令交换文件名?,命令,文件,数据,名称,工具,地址,软件,系统,基础知识,文件名,linux中用什么命令移修改文件夹名1、linux下使用mv命令来移linux改变文件所有者的命令?
linux改变文件所有者的命令?,系统,工具,文件,命令,信息,名称,用户组,用户,所有者,权限,linux修改文件权限?打开linux系统,在linux的桌面的空白linux下替换文件命令?
linux下替换文件命令?,文件,一致,评论,名称,标的,资料,工作,命令,字符串,内容,linux替换原来文件的命令方法1:sed -i s/被替换的内容/要替换成linux文件nl命令?
linux文件nl命令?,地址,工作,信息,系统,情况,标准,实时,对比,百度,命令,linux查看日志命令第一种:查看实时变化的日志(比较吃内存)。最常用的:taillinux寻找文件夹命令?
linux寻找文件夹命令?,名称,命令,文件,位置,工作,标准,目录,子目录,文件名,字符串,linux文件夹查询命令有哪些less命令,less命令的功能几乎和molinux跳到文件尾命令?
linux跳到文件尾命令?,系统,文件,命令,管理,状态,实时,末尾,光标,内容,编辑,linux复制第1,2,3行数据到文件末尾sed -n 4,$p file.txt$匹配文件linux把文件复制命令?
linux把文件复制命令?,名字,文件,软件,系统,位置,目录,命令,源文件,目标,文件夹,在Linux中,要将指定源文件复制到目标文件,但不覆盖原有文件时linux文件夹合并命令?
linux文件夹合并命令?,文件,对比,第一,下来,命令,文件夹,两个,字段,内容,数组,在linux下我有两个文件夹w1,w2,怎样把它们合并到一个文件夹1、linux下文件创建命令?
linux下文件创建命令?,名字,名称,首次,命令,文件,系统,密码,文件名,文件夹,目录,Linux虚拟机命令如何创建新的文件和文件夹首先,连接相应linuxlinux命令行安装文件?
linux命令行安装文件?,软件,官网,密码,中心,电脑,文件,命令,终端,指令,版本,Linux中怎么安装文件1、在安装jdk的过程中有时会遇到安装bin结尾