我正在尝试在Windows中的OpenCV中编写视频,并在选择编解码器时遇到各种问题。我不确定它是否在我的代码中,或者我没有必要的编解码器。代码是:
int main(int argc, char ** argv){
VideoCapture inputVideo("LFW.mp4");
Mat inputFrame, outputFrame;
VideoWriter outputVideo;
if (!inputVideo.isOpened()){
std::cout << "!!! Input video could not be opened" << std::endl;
return 1;
}
int ex = static_cast<int>(inputVideo.get(CV_CAP_PROP_FOURCC));
const string name = "Output.mp4";
Size size = Size((int) inputVideo.get(CV_CAP_PROP_FRAME_WIDTH), (int) inputVideo.get(CV_CAP_PROP_FRAME_HEIGHT));
outputVideo.open(name, CV_FOURCC('M','P','4','2'), inputVideo.get(CV_CAP_PROP_FPS), size, true);
if (!outputVideo.isOpened()){
std::cout << "!!! Output video could not be opened" << std::endl;
return 2;
}
return 0;
}
代码不断退出代码2,因此videoWriter对象对其配置不满意。
答案 0 :(得分:0)
在使用VideoCapture和VideoWriter时,人们遇到编解码器问题的情况并不少见。 (另一个不太常见的问题是OpenCV在没有编码器的情况下编译(比如在编译OpenCV时使用WITH_FFMPEG=NO
或WITH_VFW=NO
))
我会尝试以下事情剖析问题(按照涉及的麻烦程度排序:)):
尝试运行相同的程序,但将-1
而不是CV_FOURCC('M','P','4','2')
作为第二个参数传递给outputVideo.open()
。然后,您将看到一个弹出窗口,要求您选择编解码器,然后可以看到OpenCV找到的那些。
如果这对您没有帮助 - 请使用调试器进入outputVideo.open()。由于某些预处理器宏,您可能会得到一个空函数(#ifdef
。不幸的是,您必须使用调试编译的OpenCV和pdb文件才能正确执行此操作。