Как преобразовать потоки 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>

Это работает, но у него есть несколько недостатков:

  • [ 1114] Все аудиопотоки преобразуются в AC3, даже те, которые мне не нужны или не нужны, например стерео, DTS или AC3. Я хотел бы конвертировать только AAC 5.1. Команда должна быть достаточно общей, чтобы мне не приходилось проверять файл или выбирать потоки вручную.

  • Хотя преобразование работает нормально, есть несколько проблем: громкость огромна , громко, как я никогда раньше не видел, и я боюсь, что некоторые метаданные теряются при преобразовании.

    [ 116]
  • Я должен запускать это для каждого видео, которое хочу посмотреть. Это занимает время и тратит много места на жестком диске.

Итак, есть ли решение, которое устраняет хотя бы один из этих недостатков?

Возможные подходы:

  • Установите OS (импульсный звук?) В кодировать многоканальный PCM в AC3 на лету? (это было бы поразительно , так как это было бы не только с видео, но и с играми.

  • ) Исправьте мою командную строку с некоторыми умными параметрами

Спасибо!

1
задан 2 October 2012 в 05:18

1 ответ

Вы можете установить кодеки для отдельных потоков в avconv с помощью -c: n - где n - номер потока. Предположим, что ваш поток AAC - это поток 2 (то есть третий поток в контейнере):

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

Вот быстрый & amp; грязный скрипт для поиска номера потока потока 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 & amp; сохраните его как 'aac-only-to-ac3' где-нибудь в вашей переменной $ PATH (например, ~ / bin). Убедитесь, что вы делаете его исполняемым.

Затем, чтобы использовать сценарий,

aac-only-to-ac3 input.mkv

и сделать каждый MKV в каталоге

for i in *mkv; do aac-only-to-ac3 "$i"; done
0
ответ дан 2 October 2012 в 05:18

Другие вопросы по тегам:

Похожие вопросы: