我编写了一个使用OpenCV从图像序列中创建视频文件的程序。它运行良好,并做它应有的,但我意识到我无法解释的东西。我的Videowriter看起来像这样:
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会发生变化?
答案 0 :(得分:1)
即使它有点迟了,我想出来......似乎这只是OpenCV的一个错误。当我使用OpenCV方法使用h.264编码器时,视频文件已损坏。当我使用FFmpeg时,一切正常。