我有 ffmpeg 版本 n5.0.1-3-gb655beb025,我正在尝试将一组 120 个 PNG 转换为每秒 60 帧的 AVI 文件。当我使用以下命令执行此操作时:
ffmpeg.exe -r 60 -i Frame-%%05d.png MyVideoLQ.avi
它创建了正确长度(2.00 秒)的视频,但质量很差(比特率为 200kbps)。因此,我尝试通过比特率和缓冲区来解决问题:
ffmpeg.exe -i Frame-%%05d.png -b:v 4096k -maxrate:v 4096k -minrate:v 0 -bufsize 4096k -r 60 MyVideoHQ.avi
结果质量很好,但是视频现在有 4.8 秒。
- 这是一个错误,还是我误解了所使用的选项?
- 我如何实现我的目标?
答案1
放置-r 60
前这-i
:
ffmpeg.exe -r 60 -i Frame-%%05d.png -b:v 4096k -maxrate:v 4096k -minrate:v 0 -bufsize 4096k MyVideoHQ.avi
当 位于-r 60
之前 时-i
,帧速率应用输入。
当-r 60
位于 之前 之后 时-i
,帧速率应用输出。
当我们输入一系列图像时,输入帧率假定为 25fps(FFmpeg 默认值)。
当输入为 25fps,而输出需要为 60fps 时,FFmpeg 通过复制帧来应用帧率转换(从 25fps 到 60fps)。
比率60/25
=2.4
因此,产量总是长 2.4 倍。
为了用更少的参数获得更好的质量,我们可以选择视频编解码器和crf
设置。
例子:
ffmpeg.exe -r 60 -i Frame-%%05d.png -vcodec libx264 -crf 17 MyVideoHQ.avi
较低的值crf
适用较高的质量和较大的文件大小。