如何在Windows中使用openCV FFMPEG视频I/O而不是DirectShow视频I/O?

如何在Windows中使用openCV FFMPEG视频I/O而不是DirectShow视频I/O?,opencv,ffmpeg,cmake,directshow,Opencv,Ffmpeg,Cmake,Directshow,因此,我尝试使用openCV videoWriter编写视频: writer=cv.CreateVideoWriter(path+"test_output.avi",-1,fps,(W,H),1) 因此,我没有提供我提供的FOURCC-1,而是为了查看我提供了哪些编解码器。 结果是Microsoft RLE、Microsoft Video 1、Intel YUV和未压缩 原因是,当使用CMAKE for Visual Studio 10 x64配置openCV时,我在视频I/o中有以下内容:

因此,我尝试使用openCV videoWriter编写视频:

writer=cv.CreateVideoWriter(path+"test_output.avi",-1,fps,(W,H),1)
因此,我没有提供我提供的FOURCC-1,而是为了查看我提供了哪些编解码器。 结果是Microsoft RLE、Microsoft Video 1、Intel YUV和未压缩

原因是,当使用CMAKE for Visual Studio 10 x64配置openCV时,我在视频I/o中有以下内容: 视频输入/输出:DirectShow

有没有办法切换到FFMPEG?我知道ffmpeg dll存在于\3dparty\ffmpeg中。 我查找了Cmake FFMPEG标志,但没有找到任何标志。奇怪的是在视频部分下opencv根目录的CmakeLists.txt中:

if(UNIX AND NOT APPLE)
<FFMPEG stuff>
elseif(WIN32)
    status("  Video I/O:"        HAVE_VIDEOINPUT     THEN DirectShow ELSE NO)
endif()
所以在我看来,opencv自动切换到DirectShow,并且没有选择使用FFMpeg。 或者更确切地说,可以升级Driectshow以支持其他格式,如Divx或h264?
有什么想法吗?

如果您仍然无法使用FFMpeg支持编译OpenCV,那么本文链接的库为创建与windows兼容的FFMpeg包装提供了一个很好的起点:

如果您仍然无法使用FFMpeg支持编译OpenCV,此博客上链接的库为创建与windows兼容的FFMpeg包装器提供了一个很好的起点:

您要寻找的答案在这里,它适用于32位和64位配置。我使用了FFMPEG的这个版本

1下载OpenCV 2.3

2打开根CMakeLists.txt并插入行setHAVE_FFMPEG 1

3下载或32位版本,如果你喜欢的话

4使用define INT64_C编辑ffmpeg include dir中的avformat.h

5使用define snprintf\u snprintf从highgui项目编辑cap_ffmpeg_impl.hpp

6在C/C++>附加包含目录下的highgui项目属性中,添加刚刚下载的FFMPEG的包含目录的路径

7在链接器>常规>附加库依赖项下的同一属性页上,添加刚刚下载的FFMPEG的lib目录的路径

8在同一属性页的链接器>输入>附加依赖项下,添加在lib avformat.lib、avscale.lib、avcore.lib等中找到的ffmpeg库的所有名称

9构建highgui项目

10将FFMPEG附带的.dll文件的路径添加到系统路径环境变量中


就这样!10个简单步骤

您要寻找的答案在这里,它适用于32位和64位配置。我使用了FFMPEG的这个版本

1下载OpenCV 2.3

2打开根CMakeLists.txt并插入行setHAVE_FFMPEG 1

3下载或32位版本,如果你喜欢的话

4使用define INT64_C编辑ffmpeg include dir中的avformat.h

5使用define snprintf\u snprintf从highgui项目编辑cap_ffmpeg_impl.hpp

6在C/C++>附加包含目录下的highgui项目属性中,添加刚刚下载的FFMPEG的包含目录的路径

7在链接器>常规>附加库依赖项下的同一属性页上,添加刚刚下载的FFMPEG的lib目录的路径

8在同一属性页的链接器>输入>附加依赖项下,添加在lib avformat.lib、avscale.lib、avcore.lib等中找到的ffmpeg库的所有名称

9构建highgui项目

10将FFMPEG附带的.dll文件的路径添加到系统路径环境变量中


就这样!10个简单步骤

可能重复的我看到了,但是没有用的标志作为答案提示可能重复的我看到了,但是没有用的标志作为答案提示我把它改编成我自己的项目,它工作起来很有魅力祝你好运。所以我更仔细地研究了这个解决方案,我不得不将它调整为64位版本。我从FFMPEG网站上获得了64位二进制文件。但现在我在尝试构建测试ffmpeg api时遇到了3个链接错误。具体来说,dump_格式av_open_input_file和avcodec_decode_video。其中一个我发现了,因为它被弃用了。dump_格式我不能接受,所以我使用了64个库,相当于您链接的zip中捆绑的32位库,它可以工作!然而,这只是使用他提供的接口。我开发了一个更通用的解决方案,它使用FFMPEG支持构建highgui库本身。这意味着任何链接到highgui的库都会有pythonbindings、video等!我必须尝试一下你的解决方案。我将它应用到我自己的项目中,效果非常好祝你好运。所以我更仔细地研究了这个解决方案,我不得不将它调整为64位版本。我从FFMPEG网站上获得了64位二进制文件。但现在我在尝试构建测试ffmpeg api时遇到了3个链接错误。具体来说,dump_格式av_open_input_file和avcodec_decode_video。其中一个我发现了,因为它被弃用了。dump_格式我无法确定,所以我使用了
64个库相当于您链接的zip中捆绑的32位库,它可以正常工作!然而,这只是使用他提供的接口。我开发了一个更通用的解决方案,它使用FFMPEG支持构建highgui库本身。这意味着任何链接到highgui的库都会有pythonbindings、video等!我将不得不尝试你的解决方案。同样在OpenCV 2.4中,一切都是流线型的,ffmpeg dll捆绑在第三方库中。代码已经过修改,可以在运行时加载dll并调用函数,而不是将FFMPEG静态库链接到OpenCV项目。您能告诉我,在android stdio中如何使用OpenCV实现同样的功能吗?在OpenCV 2.4中,一切都经过优化,FFMPEG dll捆绑在第三方库中。代码已经被修改为在运行时加载dll并调用函数,而不是将FFMPEG静态库链接到OpenCV项目。你能告诉我,在android stdio中如何使用OpenCV实现同样的功能吗