Como converter fluxos de 5.1 AAC para AC3 para saída S / PDIF?

1

Eu conecto meu PC ao meu home theater via SPDIF, por isso, ao assistir arquivos de vídeo que usam canais AAC 5.1, ele é mixado para estéreo e os canais surround são perdidos.

Eu gostaria de poder converter todas as saídas 5.1 AAC para 5.1 AC3, então meu HT toca corretamente 6 canais discretos.

Minha abordagem atual é usar avconv para converter os fluxos de áudio dos meus arquivos assim:

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

Funciona, mas tem algumas desvantagens:

  • Todos streams de áudio são convertidos em AC3, mesmo os que eu não preciso ou quero, como estéreo, DTS ou AC3. Eu gostaria de converter apenas os AAC 5.1. O comando deve ser genérico o suficiente para que eu não precise inspecionar o arquivo ou escolher fluxos manualmente.

  • Enquanto a conversão funciona bem, há alguns problemas: o volume é enorme , alto como nunca vi antes, e temo que alguns metadados sejam perdidos na conversão.

  • Eu preciso rodar isso para cada vídeo que eu quero assistir. Leva tempo e desperdiça muito espaço no disco rígido.

Então, existe uma solução que corrija pelo menos um desses inconvenientes?

Possíveis abordagens:

  • Definir o SO (áudio de pulso?) para codificar PCM multicanal para AC3 on-the-fly? (Isso seria incrível , já que não seria apenas com vídeos, mas também para jogos.

  • Corrija minha linha de comando com alguns parâmetros inteligentes

Obrigado!

    
por MestreLion 02.10.2012 / 03:18

1 resposta

2

Você pode definir codecs para fluxos individuais em avconv com -c: n - onde n é o número do fluxo. Digamos que seu fluxo AAC seja o fluxo 2 (assim, o terceiro fluxo no contêiner):

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

Aqui está um rápido & amp; script sujo para encontrar o número do fluxo de um fluxo AAC e alimentá-lo no avconv:

#!/bin/bash

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

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

exit 0

Isso não funcionará se você tiver mais de um fluxo AAC 5.1 e ele funcionará somente com nomes de arquivos que tenham espaços se você os citar. Para usá-lo, cole esse recado de código no gedit & amp; salve-o como 'aac-only-to-ac3', em algum lugar no seu $ PATH (como ~ / bin). Certifique-se de torná-lo executável.

Então, para usar o script,

aac-only-to-ac3 input.mkv

e para fazer todos os MKV em um diretório

for i in *mkv; do aac-only-to-ac3 "$i"; done
    
por evilsoup 08.12.2012 / 00:43