【问题标题】:how can I use the openCV FFMPEG video I/O rather than the DirectShow one in Windows?如何在 Windows 中使用 openCV FFMPEG 视频 I/O 而不是 DirectShow ?
【发布时间】:2023-03-29 20:32:01
【问题描述】:

所以我正在尝试使用 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 中的内容: 视频 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? 有什么想法吗?

【问题讨论】:

标签: opencv ffmpeg cmake directshow


【解决方案1】:

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

【讨论】:

  • 我将它改编为我自己的项目,它就像一个魅力。 :) 祝你好运。
  • 所以我更仔细地研究了解决方案,我不得不将其调整为 64 位版本。我从 FFMPEG 网站获得了 64 位二进制文​​件。但是现在当我尝试构建 test-ffmpeg-api 时出现 3 个链接错误。具体来说,dump_format av_open_input_file 和 avcodec_decode_video。其中一个我想通了,因为它已被弃用。 dump_format 我不能
  • 好的,所以我使用了 64 个库,相当于您链接的 zip 中捆绑的 32 位库,它可以工作!但是,这只是使用他提供的界面。我开发了一个更通用的解决方案,它使用 FFMPEG 支持构建 highgui 库本身。这意味着任何链接到 highgui 的库都将拥有它(pythonbindings、video 等)
  • 不错!我将不得不尝试您的解决方案。
【解决方案2】:

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

1) 下载 OpenCV 2.3

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

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

4) 使用#define INT64_C 编辑ffmpeg 包含目录中的avformat.h

5) 使用 #define snprintf _snprintf 编辑 highgui 项目中的 cap_ffmpeg_impl.hpp

6)在你的highgui项目属性下的C/C++>Additional Include Directories添加你刚刚下载的FFMPEG的include目录的路径

7)在Linker>General>Additional Library Dependencies下的同一个属性页,添加刚刚下载的FFMPEG的lib目录路径

8)在Linker>Input>Additional dependencies下的同一属性页面上,添加在lib中找到的所有ffmpeg库的名称(avformat.lib、avscale.lib、avcore.lib等)

9) 构建 highgui 项目

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

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

【讨论】:

  • ALso 在 OpenCV 2.4 中,一切都得到了简化,ffmpeg dll 捆绑在 3rdparty 库中。该代码已被改编为在运行时加载 dll 并调用函数,而不是将 FFMPEG 静态库链接到 OpenCV 项目。
  • 你能告诉我,如何在 android stdio 中使用 opencv 完成相同的操作
猜你喜欢
  • 2023-03-07
  • 2017-11-14
  • 1970-01-01
  • 2016-09-17
  • 2010-10-09
  • 2012-05-24
  • 1970-01-01
  • 2018-10-29
  • 2013-03-26
相关资源
最近更新 更多