FFmpeg:生成的视频的帧大小远大于预期

问题描述

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

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

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 视频来说是超高的。生成视频时我做错了什么?感谢您的帮助,谢谢!

enter image description here

解决方法

为什么输出文件这么大?

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

我应该使用哪个 -crf 值?

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

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