Как преобразовать потоки AAC 5.1 в 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. Команда должна быть достаточно общей, чтобы мне не приходилось проверять файл или выбирать потоки вручную.
Хотя преобразование работает нормально, есть несколько проблем: громкость громкая, громкая, чего я никогда раньше не видел, и я боюсь, что некоторые метаданные теряются при преобразовании.
Я должен запустить это для каждого видео, которое я хочу посмотреть. Это занимает время и тратит много места на жестком диске.
Итак, есть ли решение, которое устраняет хотя бы один из этих недостатков?
Возможные подходы:
Установить OS (импульсный звук?) Для кодирования многоканального PCM в AC3 на лету? (это было бы удивительно, так как это было бы не только с видео, но и для игр.
Исправьте мою командную строку с некоторыми умными параметрами
Спасибо!
1 ответ
Вы можете установить кодеки для отдельных потоков в avconv с помощью -c: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
Это не будет работать, если у вас более одного потока AAC 5.1, и будет работать только с именами файлов, в которых есть пробелы, если вы заключите их в кавычки. Чтобы использовать его, вставьте этот фрагмент кода в 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