OpenCV无法创建ffmpeg视频编写器

时间:2017-11-27 07:52:08

标签: c++ opencv ffmpeg

我正在将OpenCV实现到c ++项目中,以便从图像帧创建视频。这通常在视频完全未压缩时起作用。为了减少大量的文件大小,我正在尝试使用ffmpeg,它与OpenCV一起提供。

cv::VideoWriter output_video = cv::VideoWriter(output_filename.c_str(), -1, 25, size);

在任何情况下,创建视频编写器对象时创建ffmpegWriter都会失败。在单步执行OpenCV代码时,会加载opencv_ffmpeg.dll库,并且各个函数的地址在库中成功定位。最后,到达以下代码(cap_ffmpeg.cpp):

virtual bool open( const char* filename, int fourcc, double fps, CvSize frameSize, bool isColor )
{
    icvInitFFMPEG::Init();
    close();
    if( !icvCreateVideoWriter_FFMPEG_p )
        return false;
    ffmpegWriter = icvCreateVideoWriter_FFMPEG_p( filename, fourcc, fps, frameSize.width, frameSize.height, isColor );
    return ffmpegWriter != 0;
}

icvCreateVideoWriter_FFMPEG_p始终返回0.

OpenCV不提供由opencv_ffmpeg.dll构建的调试(我在他们的网站上找到了一个没有可用的帖子)所以我没有可能进一步检查被调用函数中发生了什么。

我尝试使用OpenCV版本2.4.8,2.4.13.4和3.3.1,在所有情况下都得到相同的结果。 OpenCV是从源代码(HAVE_FFMPEG)构建的,所有东西都在Visual Studio 2015中的Windows 10 64位机器上。

注意:这与所提供的文件名或fourcc代码不同,因为OpenCV会在评估任何其他内容之前尝试查找用于创建视频的工作API。在我的情况下,API是ffmpeg并且如上所述创建编写器失败。

cv::getBuildInformation()的输出是:

....
FFMPEG:                      YES (prebuilt binaries)
  avcodec:                   YES (ver 57.89.100)
  avformat:                  YES (ver 57.71.100)
  avutil:                    YES (ver 55.58.100)
  swscale:                   YES (ver 4.6.100)
  avresample:                YES (ver 3.5.0)
....

有人知道这个问题可能是什么原因或我如何进一步调试这个问题?

0 个答案:

没有答案