我编写了一个使用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/