gpt4 book ai didi

ffmpeg - 如何连接和输出各种视频比特率和独立的音频文件?

转载 作者:行者123 更新时间:2023-12-04 22:59:25 25 4
gpt4 key购买 nike

如何在 ffmpeg 中连接和输出各种视频比特率和独立音频文件?

我的要求是:

  • 我有 4 个输入文件。
  • 需要将所有 4 个文件拼接成一个段。
  • 需要四种不同视频比特率的输出:500k、800k 1000k 1500k
  • 除此之外,我只需要从拼接文件中提取音频。

  • 所以我的输出将是 4 个不同的视频比特率 + 1 个仅音频文件。

    最佳答案

    三通混合器

    最有效的方法是使用 tee muxer (更多 examples )以避免对每个输出的音频进行不必要的编码,但使用起来很复杂:

    ffmpeg -i 1.mp4 -i 2.mp4 -filter_complex "[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[v][aud];[v]split=4[v0][v1][v2][v3]" -map "[v0]" -b:v:0 500k -map "[v1]" -b:v:1 800k -map "[v2]" -b:v:2 1000k -map "[v3]" -b:v:3 1500k -map "[aud]" -c:v libx264 -c:a aac -f tee "[select=\'v:0,aud\':movflags=faststart]500.mp4|[select=\'v:1,aud\':movflags=faststart]800.mp4|[select=\'v:2,aud\':movflags=faststart]1000.mp4|[select=\'v:3,aud\':movflags=faststart]1500.mp4|[select=aud:movflags=faststart]audio.m4a"

    此示例方法不执行两次通过,您应该在使用旧式方法手动选择非流式输出的比特率时执行此操作。见 FFmpeg Wiki: H.264 .

    更简单但效率较低的方法

    您可以执行一个不太复杂的命令,但效率会降低,因为它会分别对每个输出的音频进行编码。可能值得以较低的复杂性进行权衡。
    ffmpeg -i 1.mp4 -i 2.mp4 -filter_complex "[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[v][a];[v]split=4[v0][v1][v2][v3];[a]asplit=4[a0][a1][a2][a3]" -map "[v0]" -map "[a0]" -b:v 500k -movflags +faststart 500.mp4 -map "[v1]" -map "[a1]" -c:v libx264 -c:a aac -b:v 800k -movflags +faststart 800.mp4 -map "[v2]" -map "[a2]" -b:v 1000k -movflags +faststart 1000.mp4 -map "[v3]" -map "[a3]" -b:v 1500k -movflags +faststart 1500.mp4

    但是由于您想要针对特定​​的比特率,您应该执行两次:
    ffmpeg -y -i 1.mp4 -i 2.mp4 -filter_complex "[0:v][1:v]concat=n=2:v=1:a=0[v];[v]split=4[v0][v1][v2][v3]" -map "[v0]" -b:v 500k -pass 1 -passlogfile 500 -f mp4 /dev/null -map "[v1]" -c:v libx264 -c:a aac -b:v 800k -pass 1 -passlogfile 800 -f mp4 /dev/null -map "[v2]" -c:v libx264 -c:a aac -b:v 1000k -pass 1 -passlogfile 1000 -f mp4 /dev/null -map "[v3]" -c:v libx264 -c:a aac -b:v 1500k -pass 1 -passlogfile 1500 -f mp4 /dev/null
    ffmpeg -y -i 1.mp4 -i 2.mp4 -filter_complex "[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[v][a];[v]split=4[v0][v1][v2][v3];[a]asplit=5[a0][a1][a2][a3][a4]" -map "[v0]" -map "[a0]" -c:v libx264 -c:a aac -b:v 500k -pass 2 -passlogfile 500 -movflags +faststart 500.mp4 -map "[v1]" -map "[a1]" -c:v libx264 -c:a aac -b:v 800k -pass 2 -passlogfile 800 -movflags +faststart 800.mp4 -map "[v2]" -map "[a2]" -c:v libx264 -c:a aac -b:v 1000k -pass 2 -passlogfile 1000 -movflags +faststart 1000.mp4 -map "[v3]" -map "[a3]" -c:v libx264 -c:a aac -b:v 1500k -pass 2 -passlogfile 1500 -movflags +faststart 1500.mp4 -map "[a4]" -movflags +faststart audio.m4a

    如果您使用的是 Windows,请替换 /dev/nullNUL在上面的例子中。

    关于ffmpeg - 如何连接和输出各种视频比特率和独立的音频文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52658231/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com