c++ - OpenCV videoWriter 编解码器问题

标签 c++ opencv video

我正在尝试在 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 对象对其配置不满意。

最佳答案

Windows 上的许多编解码器都有问题。我已经正确安装了ffmpeg,但很多视频格式仍然存在问题。

试试这个 CV_FOURCC('W', 'M', 'V', '2')

VideoWriter video("Result.wmv", CV_FOURCC('W', 'M', 'V', '2'), 30, SizeOfFrame, true);

WMV 是一种糟糕的格式,但对我来说非常适合。我正在使用 Visual Studio 2015 和我自己构建的 Opencv 3.0.0。

在 Opencv 3.0.0 中,我强烈建议也包含

#include "opencv2/imgcodecs/imgcodecs.hpp"
#include "opencv2/videoio/videoio.hpp"

还有一个建议。检查输入视频的大小和 VideoWriter 的大小。 CV_CAP_PROP_FRAME_WIDTH 和 CV_CAP_PROP_FRAME_HEIGHT 在某些情况下会返回错误的值。在 video.write(Mat) 之前检查两种尺寸

您可以通过此循环检查您的视频编写器。 将您的编写器大小设置为虚拟常数。

大小 SizeOfFrame = cv::Size( 800, 600);

VideoWriter video("Result.wmv", CV_FOURCC('W', 'M', 'V', '2'), 30, SizeOfFrame, true);

在视频循环中将检索到的视频调整为与作者相同的大小。如果失败,则您的安装可能有误。

   for (;;)
        {
        bool Is = cap.grab();
           if (Is == false) {

           cout << "cannot grab video frame" << endl;

           }
           else {
              cap.retrieve(LoadedImage, CV_CAP_OPENNI_BGR_IMAGE);


              resize(LoadedImage, LoadedImage, Size(800, 600));

              video.write(LoadedImage);
           }
         }

My Tutorial here

关于c++ - OpenCV videoWriter 编解码器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20300444/

相关文章:

android - 适用于 Android C/C++ 的 Eclipse CDT

opencv - OpenCV 中的 Mat 矩阵和 SSE 的 16 字节对齐

python opencv VideoWriter : OpenCV: Frame size does not match video size

c++ - FFmpeg 阻塞管道直到完成?

c++ - C++中fscanf的正确使用方法

c++ - 错误 C3861 : DrawTarget: dentifier not found

Visual Studio 2010 的 C++ 多重继承解析问题导致 C2509 错误

c - SystemC 中的 OpenCV

opencv - Cmake gui 重置参数。如何在cmake gui中设置参数?

c# - 将视频文件从 azure blob 存储上传到 azure 媒体服务