7 : 26 AAC音声のOGM/MKV/MP4

← 7‒25 p↑ もくじ i 7‒27 n →

AAC音声のOGM・MKV・MP4動画を作ろう

2003年 7月31日
記事ID d30731

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 フィルターがあるので簡単だ。

AAC音声のOGM動画の作り方

映像を用意する

まず、音声なしのビデオを用意しよう。コーデックは、コンテナが対応してるものなら何でもかまわないが、やはり XviD だろう。 XviD だと友達が再生で困るとかいう場合は、fourCC を両方 DIVX にしておけば良いだけの話だ。

サンプルとして、damakko.aviというビデオファイルを用意しました。

音声をAAC化する

次に音声部分をAACに圧縮する。エンコーダーとしては、 QuickTime Pro、Nero、PsyTEL、faac などがある。 QuickTime Pro、Nero はフリーでなく、フリーの faac は開発途上で品質が安定しないので、 フリーで入手しやすく品質も良い PsyTEL Aacenc を使うのが良い選択だ。 Results of AAC at 128kbps public Listening TestはAACエンコーダ各種について圧縮結果の聞き比べを行ったものだ。FAACは成績が悪く「今はテスト目的以外に使うべきでない」とされている。 しかし「FAACの開発は急ピッチで進んでいる」として、フリーのエンコーダの将来に期待を寄せている。

damakko.wavというのが音声無圧縮のファイルとして……

aacenc -streaming -if damakko.wav -of damakko.aac

Encoding damakko.wav... 119.6 kbits/s

圧縮してdamakko.aacを作る。

lame と同じでプリセットを使うのが安全確実。サイズを小さくしたければ -radio-internet を、 オーディオとして程良い音質にしたければ -normal を、特に高音質にしたければ -extreme を。 ここでは -normal のひとつ下の -streaming を使った。平均120Kbpsとなった。 MP3の160Kbps相当の音質を期待できる。Vorbis とどっちがいいかは議論の余地があるが、ここではとりあえずAACを使ってみる、という話なので、 比較はしないで先に進む。

AACをいったんMP4に格納

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

これでdamakko.mp4が得られた。

Muxする

以上で下ごしらえは完了。GraphEdit を起動して、File Writer で出力ファイル名を指定。 damakko.ogm としておく。 あとは、Ogg Multiplexer に(AVIの殻に入った)映像と(MP4の殻に入った)音声を入れて結線するだけ。 MP4からAACをスプリットするのに 3ivx のフィルターを使っている。

damakko.ogmが得られます。

再生してみよう

OGM環境にAAC用のDirectShowフィルター(CoreAAC または 3ivx)があれば、どのメディアプレーヤーでも再生できるはずなので、 試してみてください。

AAC音声のMKV動画の作り方

GraphEdit で、Muxer を Matroska Muxer に変えれば、MKV形式で出力することもできる。

damakko.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)があれば、たいていのメディアプレーヤーでも再生できるだろう。

AAC音声のMP4動画の作り方

基本的には 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 などで別に作ってあとから合体させるとよい。

MPEG-2 AACをMPEG-4 AACに変換する
ハッキッシュな方法

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関連用語・豆知識

AAC
「新音声圧縮」Advanced Audio Codingの略。音声圧縮のアルゴリズム。 もともとMP3(MPEG-1およびMPEG-2規格のオーディオ・レイヤー3)の後継として開発が始まったが、 MPEG-4規格の音声としても用いられる。最近はそのほうが多い。拡張子は.aac、MP4コンテナに格納されているときは.mp4。 MP3同様、AACも具体的な実装はいろいろで、 どのツールを使うかによって微妙に仕上がりの品質が異なる。また同じAACでも、いくつかの細かい種類があって、しばしば再生などの互換性の問題も生じる。
MP4
映像・音声・字幕ほかをひっくるめたMPEG-4規格全般を漠然とMP4ということもあれば、 MP4コンテナにビデオと音声を入れたMP4動画のことを指すこともあれば、 AACファイルだけを格納したMP4コンテナを指してMP4と言うこともある。 例えば damakko.mp4 というファイル名は、AAC音声のみのオーディオファイルかもしれないし、 オーディオとビデオが合わさったMP4動画かもしれない(この記事でも両方の意味で使っている)。 ちょっと紛らわしいが、MP4は単なる拡張子で、べつに正しい言葉の使い方が決まっているわけでもないので、前後関係から判断しよう。
MPC
マルチメディア関連でMPCというときは、Media Player Classic という(見かけは質素だが)抜群にすぐれたプレーヤーを指す場合と、 音声圧縮の MusePack (旧称 MP+)を指す場合の両方があるので、文脈から判断しなければならない。
コンテナ
音声、映像、テキスト(字幕)などのいろいろなストリームを、 再生側からみて統一的に扱えるように、決まった形式にまとめるためのフォーマット。 コンテナのなかみは1トラックだけのこともあれば、10以上のトラックが含まれていることもあるが、 最も典型的な動画は音声1トラック、映像1トラックの2トラック。AVIコンテナは基本的にそれしかできない。 MP4、OGM、MKVのような新しいコンテナは3トラック以上を合体させることができる。 AACを扱う場合、よくAAC音声1トラックだけのMP4ファイルを作る。 そのため、aacを指してmp4ということもあるが、.mp4ファイルには音声だけでなくビデオのトラックなども入れることができる。 AACはオーディオ圧縮の形式、MP4は入れ物(コンテナ)。 AACはMP4だけでなく、OGMコンテナやMKVコンテナに入れることもできる(それがこの記事のテーマ)。
MPEG-2 AAC
MPEG-2規格の音声仕様の一種として定められたAAC圧縮方式。 さらにいくつかの細かい種類(プロファイル)がある。 Main というプロファイルがメインになる予定だったのだろうが、 実際には、使えるオプションを制限してハードウェア・プレーヤーなどの実装を容易にした Low Complexity というプロファイルがよく使われる。
MPEG-4 AAC
MPEG-4規格の音声仕様の一種として再定義されたAAC圧縮方式。 といっても、MPEG-2 AACとの違いはヘッダなどの形式的な点だけで、実質的な「なかみ」は同じ。 MPEG-4 AACにも、いくつかの細かい種類がある。こちらは「プロファイル」でなく「オブジェクト・タイプ」という。 Main と Low Complexity というオブジェクト・タイプはMPEG-4 AACにもあって、やはり Low Complexity が実際によく使われる。 MPEG-4規格はまだ完結してないので、これからさらに新しいものが定義される予定。
LC
「低複雑性」Low Complexity の略。要するに、あまり凝ったオプションを使わない「軽装版」。 (XviDで例えればサブピクセルやGMCを使わないで圧縮する、といったところ。) もっと複雑な圧縮オプションがあるほかのプロファイル(オブジェクト・タイプ)を使ってもLCと比べてたいして品質は向上しないらしい (再生のCPU負荷などを考えるとコスト対効果が悪い)。そんなこともあって、現在、最も一般的に使われるAACは、このLCタイプ。
HE AAC
「高効率AAC」High-Efficiency AAC の略。単にHEとも言う。 ビットレートをさらにけちりつつ、聴覚上の音質が変わらないように人間の耳をうまくごまかす技術。 mp3PRO と同じ SBRだという。
SBR
Spectral Band Replication の略。 従来のAACより圧縮性能の良いHE AACを実現する技術。 基本的にはエンコードのときローパスをかけて高音域をカットし、情報量を減らす。 デコードのとき低音域のパターンからカットされた高音域を予測し再建する。 (SBR Explained) 同じNeroを使って、SBRあり・なしの両方の方式で圧縮したサンプルを作っておいたので、自分の耳で聞き比べてみてほしい。 このサンプルだと効果のほうはイマイチはっきりしないが、このSBRに期待を寄せている人も多いようだ。 変なたとえだがビデオでいうBフレームのようなものか。
mux
OGM、MKV、MP4、AVI等々のコンテナ(入れ物)では、1つまたは2つ以上のトラック(音声・画像・字幕などのストリーム)を合体させて格納できる。 2トラックを合体させることを二重化、3トラックを合体させることを三重化……一般にいくつかのトラックを合体させることを多重化(マルチプレックス)という。 multiplexという動詞は長ったらしいので、俗にmuxと略す。逆に、コンテナ・ファイルから、 個々のトラックをばらして取り出すことをdemuxまたはsplitという。
ADIF
Audio Data Interchange Format。 AACの頭につくことがあるヘッダ。 一部のハードウェアプレーヤーで用いられるという。
ADTS
Audio Data Transport Stream。AACファイルのなかでデータブロックの一定の区切りごとに挿入されるヘッダ。 MPEG-2 AAC と MPEG-4 AAC の違いは、じつは ADTS のなかのある1ビットが0か1かというだけの違いなのだが、 これがやっかいな互換性の問題をまねく。

リンク

関連記事
リソース
RareWares
AACエンコーダのPsyTEL Aacenc、MPEG4ipツールほか、多くの貴重なバイナリがある。 AAC音声の動画の再生にべんりな、CoreAACもある。 MP4をやるなら、MPEG4ip内の mp4creator60、mp4extract60、mp4info などは必須。リンク集も貴重なリソースの宝庫。
3ivx
無料のMP4デコーダがある。GraphEdit上でMP4からAACをスプリットするのに使える。MP4を使わなくても、AAC音声のOGMやMKVの作成に使えるし、AAC音声の再生用のDSフィルターとしても使える(再生だけなら CoreAAC とどちらか一方だけでもOK)。
Doom9.net
ダウンロードページに Graphedit を含む多くのツールがある。 最新版の Graphedit は DirectX 9.0 Software Development Kit (SDK) with DirectX 9.0b Runtimeとして正式にダウンロードできる。 旧バージョンの GraphEdit と比べて使い勝手は一長一短。実験的なことをやるには必須のツール。
guliverkli
いろいろな形式のメディアを再生できる Media Player Classic のほか、 MKV関連の最新の(非公式)フィルターがある。公式フィルターではできないさまざまなことができる。 特に MatroskaMuxer は必須。また、OGMのSubTitDSフィルターは廃止されて、MKV用のVSFilterと統合される見通し。
Matroska.org
MKVの公式サイト。2003年8月4日ごろ公式版ツール群のメジャーバージョンアップがあるらしい。
MKVtoolnix
Muxerのmevmerge、Demuxerのmkvextract、そしてmevinfo。MKVまわりの必需品だ。
mpegable
無料のMP4 DirectShowフィルター(mpegable DS decoder)、MP4プレーヤー、VCMコーデックがある。一般のプレーヤーでMP4を再生するには、 DirectShowフィルターを入れるのもいいかも。
CoreVorbis
Voribis音声の再生で、OGMのOggDSの代わりに使えるフィルター。CoreAAC、CoreVorbisに続いてゆくゆくはCoreFlacも出るようだ。
foobar2000
AAC(MP4), MPC, Flac, Ape など、 いろいろな形式のオーディオを再生できるべんりなプレーヤー。

注: AAC単体も、それを使った動画も、それぞれ再生には一定のコーデックやDirectShowフィルターなどが必要です。 不明の点は検索してみよう。

更新履歴

2003年7月31日
初版
2003年8月2日
AACファイルを直接読み込めるOggMuxの新しいビルドが公開されたことを追記
2003年9月8日
用語解説の「SBC」にリンクを追加。誤字の修正 MusePac→MusePack
2003年10月23日
用語解説の「ADIF」を少しだけ具体的にした。

この記事のURL


OggMux_Nic: AAC音声のOGM手軽に

2003年 8月 2日
記事ID d30802

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)

この記事のURL


SoftSSAと「ユーザースタイルシート」

2003年 8月 2日
記事ID d30802b

Media Player Classic 6.4.5.9

メニューからのチャプターのサポートをはじめ、新機能がいろいろあるのですが、ひとつ「これはキテる」という機能が付いたのでそれを紹介します。 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 にしてください。 (古いグラフィック環境では無理です……。)

いやあ、マルティメディア技術の発達ってホントにすごいですね……。それではまた。

この記事のURL



メールアドレス(画像): [ http://www.faireal.net/image/2005/addr.png ]