使用外部音频文件替换音频中的频道

使用外部音频文件替换音频中的频道

我有 2 个 ac3 格式的音频文件,并且都只包含一个通道(audio1.ac3 和 audio2.ac3)

另一方面,我有一个包含视频和 2 个音频流的 mkv 文件 (video.mkv)

音频流 1 为 ac3 格式,有 4 个通道(我们称之为 L1 R1 C1 LFE1)

音频流 2 为 ac3 格式,也有 4 个通道。(我们称之为 L2 R2 C2 LFE2)

我想使用之前提到的 ac3 文件替换音频流 1 和音频流 2 中的中央声道。我希望最终输出的是包含以下 2 个音频流的 mkv 文件:

Audio stream 1 -> L1 R1 (audio1.ac3 as center C1) LFE1

Audio stream 2 -> L2 R2 (audio2.ac3 as center C2) LFE2

我想保留 mkv 文件中已经存在的这些音频流名称的元数据标签,并在不造成质量损失的情况下完成所有过程,并从命令行使用 FFmpeg(我在 Windows 上,但也可以从 Ubuntu 上执行此操作)

我找到的所有信息都是关于完全替换流的,而不是在通道级别。也许这是无法做到的事情。

注意:所有音频文件都具有与 mkv 文件中的流相同的采样率、参数。

答案1

使用外部音频文件替换音频中的频道

一种方法是使用加入筛选:

ffmpeg -i input.mkv -i audio1.ac3 -i audio2.ac3 -filter_complex "[0:a:0][1:a]join=inputs=2:channel_layout=5.1:map=0.0-FL|0.1-FR|1.0-FC|0.3-LFE|0.4-BL|0.5-BR[a0];[0:a:1][2:a]join=inputs=2:channel_layout=5.1:map=0.0-FL|0.1-FR|1.0-FC|0.3-LFE|0.4-BL|0.5-BR[a1]" -map 0:v -map "[a0]" -map "[a1]" -c:v copy -c:a flac output.mkv

我对频道排序做了一些假设。您可能需要进行调整。请参阅ffmpeg -layouts频道布局信息。


保留元数据标签

来自文档(根据-map_metadata选项):

默认情况下,全局元数据从第一个输入文件复制,每个流和每个章节的元数据与流/章节一起复制。

您没有提供有关文件或元数据的任何详细信息(完整的输出ffmpeg -i input.mkv -i audio1.ac3 -i audio2.ac3就足够了),所以我假设默认行为应该有效。

无质量损失

过滤需要重新编码,因此示例中使用了无损格式(flac)。

相关内容