【发布时间】:2013-03-26 19:52:13
【问题描述】:
我知道还有其他关于 OpenCV 中 FFmpeg 使用的问题,但其中大多数似乎已经过时了。
通过在 CMake 中打开 makefile,我可以验证我是否打开了 WITH_FFMPEG 标志。我的 OpenCV 构建输出文件夹包含一个 bin 文件夹,其中有 Debug 和 Release 文件夹,每个文件夹都包含一个名为 opencv_ffmpeg244.dll 的 .dll 文件的副本。当我创建 VideoWriter 并验证指向 .dll 的函数指针是否正确填充时,我可以进入 OpenCV 的源代码。这似乎很有效。
如果我使用 CV_FOURCC_PROMPT 的 FOURCC 代码,以下编解码器工作正常:
- 微软视频 1
- 英特尔 IYUV 编解码器
- 罗技视频 (I420)
- Radius 的 Cinepak 编解码器
- 全帧(未压缩)
以下编解码器无法正常工作(即生成 0kb 视频文件):
- 微软 RLE
如果我的理解是正确的,使用 FFMPEG 应该允许使用一大堆新的编解码器(x264、DIVX、XVID 等)对视频进行编码。但是,这些都没有出现在提示中。使用宏 CV_FOURCC(...) 通过 FOURCC 代码手动设置它们也不起作用。例如,使用这个:CV_FOURCC('X','2','6','4') 会产生消息:
Could not find encoder for codec id 28: Encoder not found
并制作一个大小为 0kb 的视频文件。
使用这个:CV_FOURCC('X','V','I','D') 不会产生错误消息,并制作一个 6kb 的视频文件,在 Windows Media Player 或 VLC 中无法播放。
我尝试从 Xvid.org 手动下载 Xvid 编解码器。安装后,它出现在提示中的 VFW 选项下,并且编码正常工作。所以它接近解决方案,但如果我尝试直接设置FOURCC代码,它仍然像上面一样失败!我每次都必须从提示中选择它。 FFmpeg 不应该包含一大堆编解码器吗?如果是这样,为什么我要手动下载编解码器而不是使用 FFmpeg 内置的编解码器?
我在这里缺少什么?有没有办法检查 FFMPEG 是否“启用”?提示中唯一可用的编解码器似乎是 VFW 编解码器,而不是 FFMPEG 编解码器。 .dll 已构建并与可执行文件位于同一文件夹中,但似乎没有以任何方式使用它。
这里有很多相关的问题。希望找到了解 OpenCV 中 FFmpeg 实现的人,并且对所有这些部分如何组合在一起有所了解。
【问题讨论】:
标签: windows opencv ffmpeg codec