【问题标题】:two pass encoding in ffmpegffmpeg中的两遍编码
【发布时间】:2015-08-06 14:17:11
【问题描述】:

我将在我的服务器中异步编码用户上传的不同视频。我看到了this post,据此,这就是如何对两遍编码进行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

我注意到 -pass 1 和 -pass 2 标志。但是我尝试通过只给它一个 -pass 2 标志而不在 -pass 1 标志中进行第一次编码来对视频进行编码。虽然我有这个警告,但它还是执行了:

第二遍的帧数比第一遍多

所以,我关心的是 ffmpeg 如何知道哪一个是第一遍,以便它可以进行第二遍编码?而且由于将同时上传许多视频,我不能将它们全部保存在 /dev/null 中,它不会用另一个替换一个。那我该如何管理呢?

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

谢谢。

更新

ffmpeg 命令:

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

【问题讨论】:

    标签: video encoding ffmpeg


    【解决方案1】:

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

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

    -passlogfile your_unique_video_id

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

    Link to docs

    【讨论】:

    • 您好,我没有完全理解这里的意思。如果我使用-passlogfile unique-id,我不需要使用-pass 标志吗?请您使用我将使用的命令更新您的答案(使用命令更新我的问题)。
    • 您保留 -pass N 参数,因为这使 ffmpeg 执行 2 次传递,并为两次传递添加具有相同值的 -passlogfile,因此它对特定视频使用相同的日志文件。不要犹豫,点击该文档链接:)
    • 好的。现在我懂了。最后一个困惑,关于 /dev/nul。如何管理不同的文件?由于服务器可能并行编码许多视频,它将被当前编码取代。
    • /dev/null 是空设备文件,不是普通文件。它丢弃发送给它的所有数据,因为 pass-1 的目的是创建日志文件。实际编码是在第二遍中使用来自第 1 遍的信息完成的。
    • 是的,在第一次传递期间,所需的信息将发送到passlogfile,编码发送到/dev/null。在第二遍中,它使用passlogfile 中的信息并将编码的视频保存为mp4。所以 pass-1 创建了一个 log 文件并且没有视频,而 pass-2 使用 log 文件并创建了视频。
    猜你喜欢
    • 2023-03-03
    • 2022-01-13
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    • 2018-11-14
    • 2013-01-15
    相关资源
    最近更新 更多