AAC音声の動画が実験的だった2003年7月の記事です。 現在では、こんなややこしいことは必要ありませんが、 参考として、この古い記事も残しておきます。
2004年の記事、 NeroのAACエンコーダを手軽に: HE-AAC, 6chも可(着うたフル自作も含む)、 iTunes 日本語版で作る AAC参照。
ライセンス関係がうっとうしいAACより、フリーのVorbisのほうが気持ちがいいが、 純粋に技術的に見た場合、AACがすぐれた音声圧縮技術であることも確かだ。
音声成分にAACを使ったOGM動画、MKV動画、そしてMP4動画を作ってみよう。
MP3は、1987年に開発が始まったもので、 かれこれ15年も前の理論と技術がベースになっている。現在の技術水準をもってすれば、MP3よりもっと良い音声圧縮が可能だ。 ISO標準の「血統書つき」音声圧縮としては、MP3の後継としてAACがあり、最近 HE AAC のことなどもあって注目度が上がっている。 公式の報告書 Report on the MPEG-2 AAC Stereo Verification Tests では「AACは96KbpsでMP3の128Kbpsと同等」と結論づけている。 HE AAC では、さらにすぐれた結果が出せるという期待もある。
一方、フリーの音声圧縮としては、64~160Kbps程度の低~中レートでは Ogg Vorbis が、160Kbps~くらいの高レートでは MusePack があり、 また、可逆圧縮としては Flac や Monkey's Audio (APE) などがある (技術的には、MusePackは完全にパテントフリーではないらしい)。 特に Vorbis はコンパクトで高音質ということで、音声ファイルとして、また動画の音声成分としても、 使われる割合が増えている。 64Kbpsの低レートでは、AACのほうがほんのわずかに、Vorbisより良いという報告もある(64 kbit/s Group Listening Test)。 またAACは高レートにも強く、約160~192Kbps以上では、 「透明な」(データ上は不可逆だが、聴覚上はオリジナルと区別がつかない)圧縮を行うことができる。
Vorbis、MusePackも192もあれば「透明」だろうが(大半のケースでは、MusePackは160前後ですでに透明になる)、要は、「AACと言えば高圧縮低品質のMP4用の音声圧縮とは限らない」ということ。 もともとMPEG-4はナロウバンドでマルチメディアのストリーミングを行うことも踏まえた規格だったのだろうが、 規格が確定しないうちにブロードバンド時代になってしまって、ある意味、MPEG-4は時代遅れになってしまったかもしれない。 AACといえば、そのMPEG-4用の高圧縮(低品質)音声というイメージが強いかもしれないが、必ずしもそうでもなく、 高品質オーディオとしても使えるのだ。
そもそもMPEG-4で定義されているMP4コンテナにこだわる必要すらなく、フリーのOGMやMKV形式のオーディオとしてAACを使うことも可能だ。
現状、AAC音声のOGM動画、MKV動画は、まだやや実験的な段階だから、 Windows向けのGUIの作成環境も整っておらず、模索段階にある。 以下で紹介する方法は少しややこしい部分もあるが、 ある程度の経験があるかたは参考にしてほしい。 手元ではとりあえずこれでできた、というだけで(2003年7月31日現在)、もっと良いやり方もあるのかもしれない。 一方、AAC音声の動画がすでにある場合、再生のほうは、OGM/MKV/MP4のどれも DirectShow フィルターがあるので簡単だ。
まず、音声なしのビデオを用意しよう。コーデックは、コンテナが対応してるものなら何でもかまわないが、やはり XviD だろう。 XviD だと友達が再生で困るとかいう場合は、fourCC を両方 DIVX にしておけば良いだけの話だ。
次に音声部分をAACに圧縮する。エンコーダーとしては、 QuickTime Pro、Nero、PsyTEL、faac などがある。 QuickTime Pro、Nero はフリーでなく、フリーの faac は開発途上で品質が安定しないので、 フリーで入手しやすく品質も良い PsyTEL Aacenc を使うのが良い選択だ。 Results of AAC at 128kbps public Listening TestはAACエンコーダ各種について圧縮結果の聞き比べを行ったものだ。FAACは成績が悪く「今はテスト目的以外に使うべきでない」とされている。 しかし「FAACの開発は急ピッチで進んでいる」として、フリーのエンコーダの将来に期待を寄せている。
aacenc -streaming -if damakko.wav -of damakko.aac
Encoding damakko.wav... 119.6 kbits/s
lame と同じでプリセットを使うのが安全確実。サイズを小さくしたければ -radio か -internet を、 オーディオとして程良い音質にしたければ -normal を、特に高音質にしたければ -extreme を。 ここでは -normal のひとつ下の -streaming を使った。平均120Kbpsとなった。 MP3の160Kbps相当の音質を期待できる。Vorbis とどっちがいいかは議論の余地があるが、ここではとりあえずAACを使ってみる、という話なので、 比較はしないで先に進む。
AACファイルのヘッダなどをうまく調整すれば、OggMuxやVirtualDubModなどで直接AACをMuxできるのかもしれないが(将来は確実にできるようになるだろう)、 手元ではうまく行かなかった(2003年8月2日追記: 新ツールでこれが簡単に可能になった。別記事「OggMux_Nic: AAC音声のOGM手軽に」参照)。 GraphEdit を使うのが確実だ。 しかしAACを直接レンダーできるフィルターがないので、MP4からスプリットする形にする。そのため、 mp4creator60 を使って、AACをいったんMP4に格納しておく。
mp4creator60 -optimize -c=damakko.aac damakko.mp4
以上で下ごしらえは完了。GraphEdit を起動して、File Writer で出力ファイル名を指定。 damakko.ogm としておく。 あとは、Ogg Multiplexer に(AVIの殻に入った)映像と(MP4の殻に入った)音声を入れて結線するだけ。 MP4からAACをスプリットするのに 3ivx のフィルターを使っている。
OGM環境にAAC用のDirectShowフィルター(CoreAAC または 3ivx)があれば、どのメディアプレーヤーでも再生できるはずなので、 試してみてください。
GraphEdit で、Muxer を Matroska Muxer に変えれば、MKV形式で出力することもできる。
ただし、Matroska Muxer 1.0.0.6 (2003年7月31日現在の最新版)は、AACの扱いにわずかに疑問が残る。 再生上は問題ないもののグラフの構成自体が 3ivx 経由のハッキッシュなものであるせいもあってか、 A_AAC となるべきオーディオの Codec ID が A_MS/ACM となってしまう。これは正しくないIDだから潜在的に問題がある。 そこで、AACオーディオのMKVを作るには、MKVmerge をおすすめする。 AACサポートが確実であるうえ、そもそも GraphEdit より速くてラクだ。コマンド例。
mkvmerge -o tmp.mkv damakko.avi damakko.aac
mkvmerge -o damakko.mkv --language 2:jpn tmp.mkv
AAC音声のMKV動画は GraphEdit がなくても確実に作れる。
MKV環境にAAC用のDirectShowフィルター(CoreAAC または 3ivx)があれば、たいていのメディアプレーヤーでも再生できるだろう。
基本的には mp4creator60 を使えば簡単なのだが、やっかいな互換性の問題がある。 PsyTEL Aacenc は MPEG-2 AAC を書き出すが、QuickTime は MPEG-4 AAC のみを受け付け、MPEG-2 AAC を解釈できない。 QuickTime 以外の、wmp4player、Mpegable、Envivoプラグイン(RealOne Player)、 またMpegableDS経由で一般のメディアプレーヤーで再生する場合は、 MPEG-4 AAC でも MPEG-2 AAC でも問題ない。 QuickTimeだけがクセモノだ。
問題を解決するには、MPEG-4 AAC を使えば良い。 Aacenc ではそれができない。 まだ完成度が低い faac を使って AAC のエンコードをするか、 または、フリーでない Nero や QuickTime Pro を使って音声をエンコードするか、 さもなければ、次に説明するハックが必要になる。 なお、QuickTime Pro は WAV をインポートして音声のみの MP4 を書き出すAACエンコーダとしてはすぐれているが、 ビデオのエンコードはあまり良くないので、QuickTime Pro を使う場合もビデオ成分は XviD などで別に作ってあとから合体させるとよい。
PsyTEL で作ったAACをバイナリエディタで開き、出だしの FF F9 から始まる7バイトをメモする。 例えば FF F9 4C 80 2D 3F FC とか、この16進データを検索すると、ある周期おきに、いっぱい見つかるだろう。 これらは ADTS (Audio Data Transport Stream) ヘッダの開始部分で、 一定数の raw_data_block の区切りごとに必ず前置されている。 このなかの FF F9 が MPEG-2 AAC を意味している。 MPEG-4 AAC なら FF F1 になる。たった1ビット(13ビットめ)の差なのだ。 そういうわけで、該当部分の F9 をぜんぶ F1 に一括置換してやれば、 MPEG-4 AAC になる。(こんなことでライセンス料も変化すると考えると、ちょっとこっけいだ。)
最近の mp4creator60 には、この変換を行えるスイッチが付いた。 0.9.8.4 では -mpeg-version、 0.9.9 では名前が変わって -aac-profile というスイッチで、=4 を指定すればよい。 現在の最新版 0.9.9 のソースを手に入れて自分でビルドするか、 どこかでバイナリを見つけるのも良いだろうが、 単に上記の変換を行いたいだけなら、バイナリエディタで一括置換したほうが速いかもしれない。 RareWares に今ある Set of MPEG4 tools by MPEG4ip には、mp4creator60 v.0.9.8 が入っている。 0.9.8 には上記のオプションが付いていない。 しかし、0.9.8 のほうが動作が安定しているようだ。 RareWares にはPatched MP4creatorという名で mp4creator60 v.0.9.8.4 が置いてあるから、 それを併用しても良いだろう。 Ivan & Menno 1.9 には mp4creator60 0.9.9 が同梱されているから、 それを流用しても良い。次のコマンド例(0.9.9)を参照。 0.9.8.4 と 0.9.9ではスイッチの名前が違うので注意。
aacenc -streaming -if damakko.wav -of tmp_mpeg2.aac
mp4creator60 -c=tmp_mpeg2.aac tmp_mpeg2_aac.mp4
mp4creator60 -extract=1 -aac-profile=4 tmp_mpeg2_aac.mp4 damakko_mpeg4.aac
MPEG4 AAC が得られれば、QuickTime でも再生できるMP4は簡単に作れる。 以下のコマンドで不具合があれば、0.9.8を使うこと。
mp4creator60 -optimize -c=damakko.avi damakko.mp4
mp4creator60 -optimize -c=damakko_mpeg4.aac damakko.mp4
手元では最新版を使うとMUXに成功した後のささいな処理で失敗している。 拡張子.tmpのファイルが消え残っているので、それを.mp4に改名したら完成品になる。 しかし安定している0.9.8を使うのが良いだろう。
Envivoプラグインや QuickTime で再生できる。 MpegableDSフィルターを入れれば、一般のメディアプレーヤーでも再生できるようになる。
このように、QuickTime Pro など買わなくても、MP4動画は作成できるし、 QuickTime Pro の作成するビデオより、XviD や DivX のほうが同じレートで画質が良い。 少なくとも Windows では、QuickTime Pro をMP4動画作成に使う理由がない。 ただし、AACエンコーダとしては QuickTime Pro は評価が高い。
注: AAC単体も、それを使った動画も、それぞれ再生には一定のコーデックやDirectShowフィルターなどが必要です。 不明の点は検索してみよう。
2003年7月31日の「AAC音声のOGM・MKV・MP4動画を作ろう」では、 OggMuxではどうもAAC音声がうまく使えないがそのうち修正されるだろう、というような話だったが、 タイムリーに OggMuxの機能アップ版OggMux_nicがテスト公開されている。 OggMux 0.9.5.2 に相当するが、 Cyrius の OGMuxer に対するフロントエンドになっているのが新機軸。 プロジェクトページには、 まだ登場していない。使い方は簡単で、PsyTEL Aacenc で作成した aac ファイルをそのままふつうに読み込むことができる。 注意点として、mp4形式のaacファイルは直接、読めない。また、Nero が作った HE-AAC をmuxすると、 CoreAAC での再生では不具合がある。近く改善されるとは思うが、 HE-AAC (通称 AAC+ )を使いたい場合は従来通り GraphEdit が良いだろう。 詳細と最新情報については、OGM Developmentを参照。
詳しくは別記事参照: GUIで作るAAC音声のOGM・MKV (2003-09-17)
メニューからのチャプターのサポートをはじめ、新機能がいろいろあるのですが、ひとつ「これはキテる」という機能が付いたのでそれを紹介します。 CSSでいうところの、ユーザ・スタイルシートなのです。 SSAやUSFのスタイル定義が気に入らないなら、自分で上書きできるということです。 例えば、動画作成者が指定した文字のサイズやなんかが気にくわなかったり……。それを変えられるのは当然といえば当然、 ソフトサブのメリットなのですが、これはスタイルのクラスごとの上書きなのです。 何のことだか例をあげて具体的に説明します。
例えば、もえ(画像内の女の子の名前)がスペイン語でしゃべっています。 このしゃべりは黄色っぽい色のVerdanaフォントです。これが気に入らなかったと仮定してください。
メニューの Play | Subtitles | Styles... から Styles ダイアログを呼び出します。
すると、Ichigo, Miwa, Moe といったタブが見えるので、Moe のしゃべりを変えたいのだから、Moe タブに行きます。
ここで もえ のしゃべりのフォントや位置などを設定できます。「みかちゃんフォントPB」の色は黄緑に変えてみます。
すると、Moe スタイルが上書きされ、もえ のしゃべりは全部、新しいフォントの黄緑になります。 字幕全体を一括して変えるのでなく、もえのしゃべりだけを選択的にコントロールできるところが技術的におもしろい点で、 これは、なんというか、偽春菜のトランスレートをほうふつとさせるものがあります。
だれが使うのか、こんな機能!
……と思うかもしれませんが、でも、これは案外、実用的かも。 最悪、字幕作成者が指定したフォントがシステムになくて、文字がゲタ(正方形のマス)に化けてしまうケースなどでは、 自分であるフォントを指定してやればいいですし。(USFならジェネリック・フォント指定があるので、 レンダラー側でフォントマッチングする仕様だけど……。)字幕作成者がタグで直接本文にスタイルを書いているときは、 !important 扱いで、ユーザ指定が負けてしまうのかな……。 将来は画像中の女の子の性格を個別的にコントロールするタブが付くかもしれませんな。 今でも、しゃべりの内容をぜんぜん違くしたパロディー字幕は作れるし、切り替えられるし……。 字幕の切り替えを、人物ごとに例えば口調スタイルを変えたりして、MPEG-4のオブジェクトという考え方は究極的にはそういうことまで含んでいるのでは。 SSにも似た新しい創造分野に発展する可能性もありますし。 SSTPでの「創作」くらいの広まりは、あるかも……。
メディアプレーヤーの設定ダイアログに Ichigo, Miwa, Moe というタブがある時点で、 かなりキテると思うのですが。
言い忘れましたが、これをやるには VMR9 モードにいる必要があります。 DirectX 9 をインストールして、 MPC のオプションで Video の設定を VMR9 Renderless にしてください。 (古いグラフィック環境では無理です……。)
いやあ、マルティメディア技術の発達ってホントにすごいですね……。それではまた。