在ffmpeg中进行两次传递编码

Rob*_*bin 3 video encoding ffmpeg

我将在我的服务器中异步编码用户上传的不同视频.我看到了这个位置,根据这个,这是如何对两个传递编码进行endcode:

ffmpeg -y -i input -c:v libx264 -preset medium -b:v 555k -pass 1 -c:a libfdk_aac -b:a 128k -f mp4 /dev/null && \

ffmpeg -i input -c:v libx264 -preset medium -b:v 555k -pass 2 -c:a libfdk_aac -b:a 128k output.mp4
Run Code Online (Sandbox Code Playgroud)

我注意到-pass 1和-pass 2标志.但我尝试通过给它一个-pass 2标志来编码视频,而不首先编码-pass 1标志.虽然我有这个警告,但无论如何都会执行:

第二次传球比第一次传球更多

所以,我关心的是ffmpeg将如何知道哪一个是第一遍,以便它可以进行传递2编码?并且由于许多视频将同时上传,我无法将它们全部保存在/ dev/null中,它不会将它们替换为另一个.那我该怎么办呢?

非常感谢您的帮助和指导.

谢谢.

Upadate

ffmpeg cmd:

ffmpeg -i input.mp4 -codec:v libx264 -tune zerolatency -profile:v main -preset medium -b:v 1500k -maxrate 1500k -bufsize 15000k -s hd720 -threads 0 -pass 1 -an -f mp4 /dev/null

ffmpeg -i input.mp4 -codec:v libx264 -tune zerolatency -profile:v main -preset medium -b:v 1000k -maxrate 1000k -bufsize 10000k -s hd720 -threads 0 -pass 2 -codec:a libfdk_aac -movflags +faststart output.mp4
Run Code Online (Sandbox Code Playgroud)

aer*_*tal 11

使用2遍编码时,第一遍将log使用ffmpeg2pass-X命名约定创建文件,其中X是流编号.

您可以使用该-passlogfile选项为文件设置自定义前缀.例:

-passlogfile your_unique_video_id

这将创建一个以your_unique_video_id-0.log流0 命名的文件.

链接到文档

  • 您保留“-pass N”参数,因为这会使 ffmpeg 执行 2 遍,并为两次传递添加具有相同值的“-passlogfile”,以便它对特定视频使用相同的日志文件。不要犹豫,点击该文档链接:) (2认同)
  • 是的,在第一次传递期间,所需的信息将发送到“passlogfile”并将编码发送到“/dev/null”。在第二遍期间,它使用“passlogfile”中的信息并将编码视频保存为“mp4”。因此,pass-1 创建一个“log”文件,但没有视频,pass-2 使用“log”文件并创建视频。 (2认同)