FFMPEG:两个单声道到一个立体声文件,其持续时间是这两个单声道文件中最长的

Eso*_*ric 1 audio ffmpeg

好的,我花了几天时间尝试找到正确的 ffmpeg 命令,将两个单声道文件放入一个立体声文件中,但将一个单声道文件输入到输出的左声道,将第二个单声道文件输入到输出的右声道,并具有输出持续时间设置为这两个单声道文件中最长的。为了只创建我想要的而不考虑持续时间,使用以下命令:

ffmpeg -i left.mp3 -i right.mp3 -filter_complex "[0:a][1:a]amerge=inputs=2[aout]" -map "[aout]" output.mka
Run Code Online (Sandbox Code Playgroud)

但是,正如文档中所述,输出的持续时间默认为最短的输入。但我需要输出具有最长的输入单声道文件的持续时间。我发现这可以使用amix命令来完成:

ffmpeg -i INPUT1 -i INPUT2 filter_complex amix=inputs=2:duration=longest:dropout_transition=3 -ac 2 OUTPUT
Run Code Online (Sandbox Code Playgroud)

这将输出的文件持续时间设置为输入的最长文件持续时间,但不是将 input1 放置到左通道,将 input2 放置到右通道,而是将它们合并为一个并将它们放置在左通道和右通道中。所以左声道=输入1+输入2;右声道=输入1+输入2

如何将输出的文件持续时间设置为最长并具有以下结构:

Left channel=input1
Right channel=input2
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Gya*_*yan 5

您可以使用apad过滤器填充较短的流,然后使用amerge.

假设left更短,然后使用

ffmpeg -i left.mp3 -i right.mp3 -filter_complex "[0]apad[a];[a][1]amerge[aout]" -map "[aout]" output.mka
Run Code Online (Sandbox Code Playgroud)