我知道有其他关于OpenCV中使用FFmpeg的问题,但它们大多数似乎已经过时了。
通过打开CMake中的makefile文件,我可以验证是否已开启WITH_FFMPEG标志。我的OpenCV构建输出文件夹包含一个bin文件夹,在其中有Debug和Release文件夹,每个文件夹都包含名为opencv_ffmpeg244.dll的.dll文件的副本。当我创建VideoWriter并验证dll的函数指针正确填充时,我可以进入OpenCV的源代码。看起来一切运作正常。
如果我使用CV_FOURCC_PROMPT的FOURCC代码,以下编解码器将正常工作:
- Microsoft Video 1 - Intel IYUV codec - Logitech Video (I420) - Cinepak Codec by Radius - Full Frames (Uncompressed)
以下编解码器不起作用(即产生0kb视频文件):
- Microsoft RLE
如果我的理解是正确的,使用FFMPEG应该允许使用大量新编解码器(如x264、DIVX、XVID等)进行视频编码。但是,这些编解码器都没有出现在提示框中。尝试使用宏CV_FOURCC(...)手动设置它们的FOURCC代码也不起作用。例如,使用这个:CV_FOURCC('X','2','6','4')会产生以下消息:
无法找到编解码器ID 28的编解码器:未找到编解码器
并生成大小为0kb的视频文件。
而使用这个:CV_FOURCC('X','V','I','D')则没有错误消息,并生成大小为6kb的视频文件,但无法在Windows Media Player或VLC中播放。
我尝试手动从Xvid.org下载Xvid编解码器。安装后,它出现在提示框的VFW选择中,并且编码器可以正常工作。所以这已经接近一个解决方案了,但是如果我尝试直接设置FOURCC代码,它仍然会失败!我每次都必须从提示框中选择它。FFmpeg难道不应该包含大量编解码器吗?如果是这样,为什么我要手动下载编解码器而不是使用内置的FFmpeg?
我错过了什么?有没有办法检查FFMPEG是否“启用”?似乎提示框中唯一可用的编解码器是VFW编解码器,而不是FFMPEG编解码器。dll已构建并位于可执行文件相同的文件夹中,但似乎根本没有使用它。
通过打开CMake中的makefile文件,我可以验证是否已开启WITH_FFMPEG标志。我的OpenCV构建输出文件夹包含一个bin文件夹,在其中有Debug和Release文件夹,每个文件夹都包含名为opencv_ffmpeg244.dll的.dll文件的副本。当我创建VideoWriter并验证dll的函数指针正确填充时,我可以进入OpenCV的源代码。看起来一切运作正常。
如果我使用CV_FOURCC_PROMPT的FOURCC代码,以下编解码器将正常工作:
- Microsoft Video 1 - Intel IYUV codec - Logitech Video (I420) - Cinepak Codec by Radius - Full Frames (Uncompressed)
以下编解码器不起作用(即产生0kb视频文件):
- Microsoft RLE
如果我的理解是正确的,使用FFMPEG应该允许使用大量新编解码器(如x264、DIVX、XVID等)进行视频编码。但是,这些编解码器都没有出现在提示框中。尝试使用宏CV_FOURCC(...)手动设置它们的FOURCC代码也不起作用。例如,使用这个:CV_FOURCC('X','2','6','4')会产生以下消息:
无法找到编解码器ID 28的编解码器:未找到编解码器
并生成大小为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实现和这些组件如何拼合有一定了解的专业人士。