问题描述
我在以“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 视频来说是超高的。生成视频时我做错了什么?感谢您的帮助,谢谢!
解决方法
为什么输出文件这么大?
-crf
允许您设置特定的质量。 x264 然后将应用适当数量的位来实现所需的质量。您正在使用几乎无损的 -crf 1
。这需要大量的位。 CRF 尺度是从 0 到 51 的对数。0 是无损,~18 是视觉无损,23 是默认值,51 是最高值和最差质量。所以 -crf 1
将比 -crf 18
大很多倍,即使您无法从视觉上分辨出来。
我应该使用哪个 -crf
值?
使用可提供可接受质量的最高 -crf
值,除非您有特定需求或需要无损输出。
有关详细信息和示例,请参阅 FFmpeg Wiki: H.264。