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

时间:2012-02-22 00:19:49

标签: 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和Uncompressed。

原因是当使用CMAKE为Visual Studio 10 x64配置openCV时,这就是我在视频i / o中所拥有的:  视频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? 有什么想法吗?

2 个答案:

答案 0 :(得分:7)

您正在寻找的答案就在这里,它适用于32位和64位配置。我使用了这个FFMPEG版本。 http://ffmpeg.zeranoe.com/builds/win64/dev/ffmpeg-git-1aeb88b-win64-dev.7z

1)下载OpenCV 2.3

2)打开根CMakeLists.txt并插入行集(HAVE_FFMPEG 1)

3)下载http://ffmpeg.zeranoe.com/builds/win64/dev/ffmpeg-git-1aeb88b-win64-dev.7z(如果您喜欢,则下载32位版本)

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

5)使用#define snprintf _snprintf

编辑highgui项目中的cap_ffmpeg_impl.hpp

6)在C / C ++下的highgui项目属性中&gt;其他包含目录添加刚刚下载的FFMPEG包含目录的路径

7)在Linker&gt; General&gt; Additional Library Dependencies下的同一属性页面上,添加刚刚下载的FFMPEG的lib目录的路径

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

9)构建highgui项目

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

就是这样! 10个简单的步骤;)

答案 1 :(得分:1)

如果您仍然无法使用FFMpeg支持编译OpenCV,则此博客文章中链接的库为创建与Windows兼容的FFMpeg包装提供了一个很好的起点:Making OpenCV-2.3 work with ffmpeg library and Microsoft Visual Studio 2010