FFmpeg:生成的视频的帧大小比预期的大得多

FFmpeg: Frame sizes of the generated video are extremely larger than the expected

我在以“400x225”的分辨率运行的游戏中将帧(屏幕缓冲区)记录为 NumPy 数组。每个帧数组的大小为 270.1 kB。

保存这些帧后,我使用以下 bash 命令创建了一个 mp4 文件(游戏以 35 FPS (frames/second) 运行):

ffmpeg -r 35 -f image2 -i frame%05d.png -vcodec libx264 -crf 1 video.mp4

然后我使用了一个工具从上面的命令创建的视频中生成帧数据的 CSV 文件。输出在下面。奇怪的是,如果我们将前 35 帧相加(视频是使用“-r 35”参数录制的,因为游戏以 35 FPS 运行),我们得到大约 18k kbit。

18k kbit/sec 400x225 视频的比特率非常高。生成视频时我做错了什么?感谢您的帮助,谢谢!

为什么输出文件这么大?

-crf 允许您设置特定质量。然后 x264 将应用适当的位数来实现所需的质量。您使用的 -crf 1 几乎是无损的。这需要大量的比特。 CRF 标度是从 0 到 51 的对数。0 是无损的,~18 是视觉无损的,23 是默认值,51 是最高值和最差质量。所以 -crf 1 将比 -crf 18 大很多倍,即使您无法在视觉上分辨出差异。

我应该使用哪个 -crf 值?

除非您有特定需求或需要无损输出,否则请使用可提供可接受质量的最高 -crf 值。

有关更多信息和示例,请参阅 FFmpeg Wiki: H.264