我通过 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