6ch (5.1ch) の AC3 を 6ch (5.1ch) の AACに変換するには、どうしたら良いか(掲示板での質問1827)。
一番簡単なやり方は、AC3をfoobar2000で開いて、 FAACで書き出すことですが(このときステレオにダウンミックスしないように注意)、FAACは開発研究途上のエンコーダです。 次に簡単なのは、Psytel aacencですが、Psytelは巨大なファイルを受け付けられないという制限があります。 そこで、AacMachineを使って、入力を分割してPsytelに渡し、部分ごとにAACに変換して、後からまたくっつける、という方法があります。 (このやり方では 16-bit WAV経由になります。どうしても24-bit WAV経由にしたい場合は、 「[動画作成Tips] 巨大AC3を24-bit経由で6ch AACに (PsyTEL)」を見てください。)
5.1ch AC3は、400Kbps以上あるはずですが、 5.1ch AAC にPsytelのデフォで変換しても同じくらいのレートになりますから、 AAC化してもサイズ的にたいしてとくにならず、かえって変換の劣化で音質を損する可能性があります。 また、6chものは、形式によって、チャンネルオーダーの問題があります。 Center Front、 Left、 Right、 Left Surround (Rear)、 Right Surround (Rear)、 LFE、かな? とにかく面倒だし、時間がかかるわりにサイズは減らないで音質が落ちるので、5.1同士のAC3からAACの変換は、 特に目的意識がない場合はやらないほうがいいかと。なお、CoreAACは、6chを2chデバイスで再生できます(ダウンミックス)。
AacMachine.exe 本体と、 BeSweet.exe と azid.dll と BeSplit.exe と aacenc.exe と ia32math.dll を用意する。
AacMachineを起動して、必要なコンポーネントのPathを指定。 変換元と変換先を指定。画像は、120分のトラックを、600秒ごとに分割エンコする場合。 トラックの長さは短い分にはOKです。100分のを120分と指定してOK。しかし150分ものを120分と指定すると途中までしかエンコされないので注意。
2時間あるような、巨大AC3を、24-bit WAV経由でPsyTEL Aacencにて6ch AACに変換。
PsyTEL Aacencは、あまりに大きなファイルを入力できません。 AacMachineでは、BeSplitで細切れにして処理します。 中間処理が16-bit wavであれば、AacMachineを使うのが簡単・早道です。 中間を24-bitにしても、理論上はともかく、人間に知覚可能な音質向上はまずないでしょう。 なにしろ16-bit WAVは「無圧縮」のCDの音質ですから。 苦労してこの方法で24-bit処理するのに見合う価値があるかどうか、主観的な問題ですが……。
次の点にも注意。
それでもどうしてもやりたい、というかたは、下記手順を参考にしてください。 このメモは2003年11月現在の方法ですが、もうしばらくすれば、もっと楽に作業できる環境が整うことでしょう。
BeSplitを使って、AC3を適当に細切れにします(詳細は付属ドキュメントやコマンドのヘルプなどを参照)。 以下の例では、2時間少々の R:\test\test.ac3 を1000秒(16分40秒)ごとに分割します。 コマンドは実際には1行です。
besplit -core( -input "R:\test\test.ac3"
-prefix "R:\test\tmp" -type ac3 -a
-logfilea "R:\test\test.log" )
-split( 0 1000 2000 3000 4000 5000 6000 7000 8000 9000 )
これで、test.ac3 が、tmp01.ac3, tmp02.ac3, ... , tmp09.ac3 に分割されました。 最後の一つを除いて各AC3ファイルは16分40秒です。
[00:00:00:000] +------- BeSplit ----- [00:00:00:000] | Input : R:\test\test.ac3 [00:00:00:000] | Source Sample-Rate: 48.0KHz [00:00:00:000] | Channels Count: 5, Bitrate: 448kbps [00:00:00:000] | Output Prefix : R:\test\tmp [00:00:00:000] +--------------------- [00:00:00:000] | Starting address = 0x0. [00:16:40:000] | Writing R:\test\tmp01.ac3 [00:33:20:000] | Writing R:\test\tmp02.ac3 [00:50:00:000] | Writing R:\test\tmp03.ac3 [01:06:40:000] | Writing R:\test\tmp04.ac3 [01:23:20:000] | Writing R:\test\tmp05.ac3 [01:40:00:000] | Writing R:\test\tmp06.ac3 [01:56:40:000] | Writing R:\test\tmp07.ac3 [02:13:20:000] | Writing R:\test\tmp08.ac3 [02:17:13:216] | Writing R:\test\tmp09.ac3 [02:17:13:216] +--------------------- [02:17:13:216] Operation Completed ! [00:16:58:000] <-- Process Duration
foobar2000から、Aacencを呼び出して、上記の短いAC3を全部6chのAACに変換します。 デフォルトでは、一時作業用ファイルとして 24-bit undithered WAV が中間出力されます。 ここを16-bitにするのなら、AacMachineを使ったほうが便利です。 AacMachineは16-bitで中間処理するので、24-bitで中間処理したいなら、このような、少し面倒なやり方になります。 いったんWAVで書き出して、あとからAacencなりを手動で呼ぶのでもかまいません。
この作業はとても時間がかかりますが、foobar2000のリストを使ってバッチ処理できます。
細切れにしたAC3ごとにAACになったので、あとは、それを再結合して一つのAACファイルにします。
次のような9行からなるテキストファイルを作成し、R:\test\work.lst などの名で保存します。
R:\test\001 tmp01.aac R:\test\002 tmp02.aac ... R:\test\009 tmp09.aac
このリストファイルを入力として、次のコマンドを実行して、out.aac を得ます。
BeSplit -core( -input "R:\test\work.lst"
-join -type aac -prefix "R:\test\out.aac"
-logfilea "R:\test\test.log" )
この作業は比較的、高速です。
BeSplit -core( -input R:\test\work.lst -join -type aac -prefix R:\test\out.aac -logfilea R:\test\test.log ) [00:00:00:000] +------- BeSplit ----- [00:00:00:000] | Input : R:\test\work.lst [00:00:00:000] | Output Prefix : R:\test\out.aac [00:00:00:000] +--------------------- [ 0] Proessing R:\test\001 tmp01.aac.. [ 33748972] Proessing R:\test\002 tmp02.aac.. [ 68776077] Proessing R:\test\003 tmp03.aac.. [ 102758033] Proessing R:\test\004 tmp04.aac.. [ 137265437] Proessing R:\test\005 tmp05.aac.. [ 170213862] Proessing R:\test\006 tmp06.aac.. [ 205553863] Proessing R:\test\007 tmp07.aac.. [ 241660405] Proessing R:\test\008 tmp08.aac.. [ 276846617] Proessing R:\test\009 tmp09.aac.. [ 284479887] <-- Output file length [00:00:00:000] +--------------------- [00:00:00:000] Operation Completed ! [00:10:31:000] <-- Process Duration
MKV動画でIDX+SUBのソフトサブを行うと、画面のアスペクト比によっては、字幕の文字が横長に潰れて見える場合があります。 ソースのレターボックスをクリッピングして、640x272などのサイズのビデオを作った場合、 もとのIDXが720x480(640x480)を前提にしているため、 ビデオ本体と字幕ストリームとの間でアスペクト比の不整合が生じます。
IDXデータを編集して字幕のアスペクト比を決め打ちするより、再生時に調整するほうが柔軟な対応がききます。 要するに、ソフトサブを入れるための「ソフトレターボックス」を作ればいいわけです。
このメモは「動画作成Tips」と書いてありますが、 以下の話は、主に再生時にできることがらです。
ソフトサブの強みで、字幕は映像の中に焼きこまれておらず、再生時にブレンドするので、 ソフトSUB字幕のアスペクト比は、再生時に設定で調整できます。 CPU等の再生リソースさえ許せば、ソフトサブは便利ですね。
ですので、「再生時にいくらでも好きに設定できるので、作成時にIDXヘッダで決め打ちする必要はない」 というのが、このTipの要点です。 IDXを自分で書き換える方法もうまくいけば魅力的なので、 「IDXを編集してはいけない・するべきでない」という意味ではありません。 「IDXを編集しなくても再生時の設定でも字幕のアスペクト比は後から調整できる」という意味です。
IDXで決め打ちすると、映像のなかに「正しい」アスペクト比で字幕が乗るようにできる可能性がありますが、 それよりも、ソフトレターボックスを作って、映像と重ならないように字幕を表示したい、という要求もありえるはずです。 そういう意味では、再生時に調整するやり方のほうが柔軟ではないか、というのが2003年11月時点での考えです。 SUB自体、まだまだ初期テスト段階ですし。 将来的には、初めから「このようにソフトレターボックスを出せ。字幕の表示位置はこうでアスペクト比はこうだ」 とコンテナ自体に設定を記録できるように、なるんじゃないかな。
文字が横長にゆがむ場合があります。 必要に応じて、DirectVobSubのプロパティにて、GeneralタブのPicture Sizeを適当に変更してください。
DirectX 9 のVMR9モードでは、サブピクチャー(字幕)とメインのイメージの独立性が高く、 単に画面をリサイズするだけで、ビデオ本体のアスペクト比とは独立に、字幕部分のアスペクト比を簡単に調整できます。