如何将 5.1 AAC 流转换为 AC3 以用于 S/PDIF 输出?

如何将 5.1 AAC 流转换为 AC3 以用于 S/PDIF 输出?

我通过 SPDIF 将我的电脑连接到家庭影院,因此在观看使用 AAC 5.1 声道的视频文件时,它会被混音为立体声,而环绕声道会丢失。

我希望能够将所有 5.1 AAC 输出转换为 5.1 AC3,以便我的 HT 可以正确播放 6 个独立通道。

我当前的方法是使用来avconv转换我的文件的音频流,如下所示:

avconv -i <inputfile> -codec copy -codec:a ac3_fixed -b:a 448k <outputfile>

虽然它可以起作用,但是也有一些缺点:

  • 全部音频流被转换为 AC3,即使是我不需要或不想要的音频流,如立体声、DTS 或 AC3。我只想转换 AAC 5.1 音频流。命令应该足够通用,这样我就不必检查文件或手动选择音频流。

  • 虽然转换工作正常,但仍存在一些问题:音量巨大的,我从未见过这么响的声音,我担心转换时会丢失一些元数据。

  • 我必须为观看每个视频运行这个程序。这很耗时,而且浪费大量硬盘空间。

那么,有没有一种解决方案可以解决至少一个这些缺点呢?

可能的方法:

  • 设置操作系统(脉冲音频?)以将多通道 PCM 即时编码为 AC3?(这将是惊人的,因为它不仅适用于视频,还适用于游戏。

  • 使用一些智能参数修复我的命令行

谢谢!

答案1

您可以使用 -c 为 avconv 中的各个流设置编解码器:n- 在哪里n是流的编号。假设您的 AAC 流是流 2(因此,是容器中的第三个流):

avconv -i input.mkv -c copy -c:2 ac3_fixed -b:2 448k output.mkv

这是一个快速而粗糙的脚本,用于查找 AAC 流的流号,并将其输入到 avconv 中:

#!/bin/bash

foo=$(avconv -i "$1" 2>&1 | grep aac | grep 5.1 | sed -e 's/    Stream #0.//' -e 's/(.*//')

avconv -i "$1" -c copy -c:$foo ac3_fixed -b:$foo 448k "AC3-$1"

exit 0

如果您有多个 5.1 AAC 流,则此方法将不起作用,并且它只适用于带空格的文件名(如果您用引号括起来的话)。要使用它,请将该代码片段粘贴到 gedit 中并将其保存为“aac-only-to-ac3”,保存在您的 $PATH 中的某个位置(例如 ~/bin)。请确保您使其可执行。

然后,要使用脚本,

aac-only-to-ac3 input.mkv

并在目录中执行每个 MKV

for i in *mkv; do aac-only-to-ac3 "$i"; done

相关内容