FFmpeg 2 遍编码

FFmpeg 2 遍编码

我正在尝试转换我的高质量电影收藏以节省一些磁盘空间。我了解到 2 Pass 编码会做得更好。这是我用来使用 2 Pass 编码视频的命令行。

ffmpeg -i input.mkv -c:v libx264 -vf "scale=1920x1080" -vb 3.5M -pass 1 -an pass1.mp4
ffmpeg -i input.mkv -c:v libx264 -vf "scale=1920x1080" -vb 3.5M -pass 2 -c:a copy pass2.mp4

这很好用。而且我知道这个命令也会给出第一遍的输出。没问题。我会删除它们。我的疑问是,我读过很多论坛,人们在 2 遍编码中使用-y和命令。和做什么?-passlogfile-y-passlogfile

另外我可以添加其他设置来提高质量吗?

答案1

tl;dr --crf除非你需要特定的文件大小,否则只需使用 1-pass

  • 1 次传递比 2 次传递更快。
  • 2-pass 不会产生质量更好或更小的文件:它只允许您设置输出文件大小(但不能设置质量),而-crf允许您选择质量(但不能选择文件大小)。

问题

我了解到 2 Pass 编码可以更好地完成这项工作。

两通将带来更好的工作针对特定的输出文件大小。否则,只需使用 进行一次传递-crf

我知道这个命令也会给出第一遍的输出。没关系。我会删除它们。

您可以输出到/dev/null(Linux 和 macOS)或NUL(Windows)并避免创建临时文件:

ffmpeg -y -i input.mkv -c:v libx264 -vf "scale=1920:1080" -b:v 3.5M -pass 1 -an -f mp4 /dev/null
ffmpeg -y -i input.mkv -c:v libx264 -vf "scale=1920:1080" -b:v 3.5M -pass 2 -c:a aac output.mp4

FFmpeg Wiki:H.264 - 双程了解更多信息和示例。

-y和起什么-passlogfile作用?

  • -y覆盖输出文件而不要求确认。第一次操作时这样做是有意义的,否则它会询问你File '/dev/null' already exists. Overwrite ? [y/N]。是的,你可以“覆盖” /dev/null

  • -passlogfileffmpeg2pass-0.log设置两遍日志文件名。除非您想使用自定义日志文件名而不是默认 ( ),否则无需使用此选项。

查看ffmpeg文档了解有关这些选项的更多信息。

另外我可以添加其他设置来提高质量吗?

  • 使用您有耐心的最慢预设。参见FFmpeg 维基:H.264
  • 增加比特率。
  • 使用更高效的编码器,例如 libx265。请参阅FFmpeg 维基百科:H.265。请注意,它很慢。
  • 避免升级。尝试不同的缩放算法看看什么对你来说最好:"scale=1920:-2:flags=lanczos"
  • 购买另一个驱动器并且不要重新编码。

相关内容