我编写了一个使用OpenCV从图像序列中创建视频文件的程序。它可以正常运行并执行应有的功能,但我意识到我无法解释。我的录像机看起来像这样:

VideoWriter video(name + ".avi", CV_FOURCC(FOURCC[0], FOURCC[1], FOURCC[2], FOURCC[3]), fps, cvSize((int)width, (int)height));

    for (;;)
    {
        capture >> frame;
        if (frame.empty())
            break;
        if (!frame.data)
        {
            cerr << "Could not retrieve frame.";
            return -1;
        }
        video << frame;
    }

对于压缩,我使用“MJPG”,“M4S2”(某些MPEG-4编解码器)或“X264”(H.264编解码器)。我正在通过用户输入获取“fps”值。一切正常,但是我发现X264编码视频的输出文件与fps比例缩放,fps越高,输出文件越小。对于其他2个,大小保持不变,只是视频的长度发生了变化(正如我期望的那样,因为它应该具有相同的帧数,只是时间有所不同)。
谁能解释我为什么在这里使用X264更改文件大小?

最佳答案

即使有点晚,我也想通了……看来这只是OpenCV的一个错误。当我使用OpenCV方法使用h.264编码器时,视频文件已损坏。当我使用FFmpeg时,一切正常。

关于c++ - OpenCV:H.264编码视频的文件大小,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27290608/

10-15 04:51
查看更多