web-dev-qa-db-ja.com

5.1 AACストリームをS / PDIF出力用にAC3に変換する方法は?

PCを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>

動作しますが、いくつかの欠点があります。

  • AllオーディオストリームはAC3に変換されます。ステレオなど、必要のない、またはしたくないものでも、DTSまたはAC3です。 AAC 5.1のもの:コマンドは十分に汎用的であるため、ファイルを検査したり、ストリームを手動で選択したりする必要はありません。

  • 変換は正常に機能しますが、いくつかの問題があります。ボリュームが巨大であり、これまで見たことがないほど大きな音量であり、変換時に一部のメタデータが失われることを恐れます。

  • 視聴したいすべてのビデオに対してこれを実行する必要があります。それには時間がかかり、多くのHDDスペースを無駄にします。

だから、これらの欠点の少なくとも1つを修正する解決策はありますか?

可能なアプローチ:

  • OS(パルスオーディオ?)を設定して、マルチチャネルPCMをオンザフライでAC3にエンコードしますか? (これはamazingになります。これは、ビデオだけでなくゲームでも使用されるためです。

  • いくつかのスマートパラメーターを使用してコマンドラインを修正する

ありがとう!

1
MestreLion

-c:n-ここで、nはストリームの番号で、avconvで個々のストリームにコーデックを設定できます。 AACストリームがストリーム2(つまり、コンテナの3番目のストリーム)であるとします。

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
2
evilsoup