使用 ffmpeg 以 vp8+vorbis 编码定位特定文件大小

Targeting a specific file size in vp8+vorbis encoding using ffmpeg

我有几个视频要编码为 vp8 视频和 Vorbis 音频。这是我目前使用的 FFmpeg 命令:

ffmpeg -y -i input.mp4 -map 0:v:0 -s 640x360 -filter:v fps=20 -c:v libvpx -crf 10 -b:v 200k -map 0:a:0 -b:a 48k -c:a libvorbis output.webm

我想控制输出文件大小并将其限制为 3MB 而不剪辑视频,但反而会降低质量。所以我不能使用 -fs 3MB.

如何根据视频和音频比特率和持续时间来确定文件大小?

如何在不裁剪的情况下限制文件大小?

10 秒输入的示例,输出刚好低于 3 MB 输出:

3 MB * 8000 / 10 seconds - 48kb audio bitrate - 1% muxing overhead = -b:v 2328k

针对特定输出文件大小时进行两次编码:

ffmpeg -y -i input.mp4 -map 0:v:0 -filter:v "scale=640:360,fps=20" -c:v libvpx -b:v 2328k -pass 1 output.webm
ffmpeg -y -i input.mp4 -map 0:v:0 -filter:v "scale=640:360,fps=20" -c:v libvpx -b:v 2328k -map 0:a:0 -c:a libvorbis -b:a 48k -pass 2 output.webm

参见: