FFmpeg 2 通道编码

Rvi*_*idD 5 ffmpeg

我试图转换我的高质量电影收藏以节省一些磁盘空间。我了解到 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
Run Code Online (Sandbox Code Playgroud)

这工作正常。而且我知道这个命令也会给出第一遍的输出。没关系。我会删除它们。我的疑问是,我阅读了许多人们使用的论坛-y-passlogfile2 pass 编码中的命令。做什么-y-passlogfile做什么?

还有我可以添加任何其他设置来提高质量吗?

llo*_*gan 6

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
Run Code Online (Sandbox Code Playgroud)

有关更多信息和示例,请参阅FFmpeg Wiki:H.264 - 两遍

做什么-y-passlogfile做什么?

  • -y无需确认即可覆盖输出文件。第一遍有意义,否则它会问你File '/dev/null' already exists. Overwrite ? [y/N]。是的,您可以“覆盖” /dev/null

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

有关这些选项的更多信息,请参阅ffmpeg文档

还有我可以添加任何其他设置来提高质量吗?

  • 使用您有耐心的最慢预设。参见FFmpeg 维基:H.264
  • 提高比特率。
  • 使用更高效的编码器,例如 libx265。参见FFmpeg 维基:H.265。请注意,它很慢。
  • 避免升级。尝试不同的缩放算法,看看哪种算法最适合您:"scale=1920:-2:flags=lanczos".
  • 购买另一个驱动器,不要重新编码。