8 : 08 動画音声: コマンドライン入門

← 8‒07 p↑ もくじ i 8‒09 n →

MP3・Vorbis・AAC―動画音声の話

2003年 9月17日
記事ID d30917

この記事は、動画の音声部分としてのオーディオについてのメモです。 したがって、オーディオファイル単体で音楽を楽しむ場合にはないような問題や、異なる処理が必要になる場合もあります。 また、最新のメディアフォーマットなどを扱うのに避けて通れない「コマンドライン」の入門をも意図していました。

メモを書いた2003年9月から、現在(2004年3月)までのわずか半年で、 AAC関連の急激な普及、foobarの度重なるバージョンアップ、rmvbコンテナの普及、 FLAC音声の動画など、あまりにも多くのことが変わってしまいました。

以下の古いメモのなかには、今でも役立つ部分もあるかもしれませんが、 内容が古く現在の状況と合わない部分もあることをお含みおきください。 機会があれば、動画音声については、まとめなおしたいと思っています。 foobar2000については、 2004年2月に便利な日本語Wikiもできましたので、 ご利用ください。基本的なFAQから、各コンポーネントごとの詳細な情報までが収録されています。

参考までに、以下古い記事を残してあります。

古い記事(2003年9月)

動画の音声成分としてのMP3、Ogg Vorbis、AACについて。 MP3 VBRの問題、音声のディザリングなど。

後半で foobar2000 をフロントエンドとするGUIベースの作業を導入しますが、 前半ではコマンドラインの作業を第一歩から説明します。 初心者脱却のためにどうしても必要な道ですから、他のサイトなども参考にしながら、チャレンジしてみてくださいね。

この記事は、かなり広い(少々雑多な)範囲を扱っており、 「DVD→AVI・OGM・MKV入門」にすぐ続けて読むのは、ちょっときついかもしれません。 そんな方は、先に「MPEG2(DVD・TV)→AVIでMP3を簡単に使う方法」をどうぞ。

初めに

コマンドラインの意味

コマンドラインの基本を覚えることは、次のような意味を持っています。

フロントエンドを使う場合でも、細かい設定がよく理解できるようになる
コマンドラインがまったく分からないとプリセットされているデフォルトの設定しか使えなかったり、 トラブルが起きても原因が分からなかったりします。 いざと言うときにコマンドラインを直接操作して確認できることが役立ちます。
フロントエンドがないツールを使えるようになる
この連載のテーマである「新しい動画」(OGM、MKV)では、特に重要なことです。 GUIフロントエンドが存在していても全オプションがサポートされていない場合や、 バグがある場合、また、ちょっとした作業で、 コマンドラインを直接使えることがどれだけ便利か計り知れません。 動画に限らずコマンドラインから使える重宝なツールは無数にあります(例、Perl.exe)。
解説記事が理解できるようになる
コマンドラインが分からないと、例えば「-q 3でやる」といった説明を見ても、 何をどうすれば良いのか見当もつかず、初学者は読んではいけない記事みたいに思ってしまうでしょう。 これらは単に -q 3 オプションを指しているにすぎず、 GUIフロントエンドなら音質スライドバーを3にするだけの話です。 分かってしまえば何でもないことが、コマンドラインを毛嫌いするせいでいつまでも理解できないとしたら、 もったいない話ではないでしょうか。
もくじ
  1. コマンドライン入門
  2. MP3
  3. Ogg Vorbis
  4. AAC
  5. 付録1: 基本の心構え
  6. 付録2: WAV解像度とディザリング

(1) コマンドライン入門

このセクションでは、 C:\local\bin に入れたコマンドラインツールを、 どこからでもコマンド名だけで呼び出せるように、そこにPATHを通す作業を、一から説明します。 話の順序として、ひどく入門的な部分から書いていますので、 必要ない方は、MP3の項に飛んでください。

注意: 記事中の区切り文字 \ は、 環境によって半角のバックスラッシュ \ に見える場合と、半角の ¥ に見える場合がありますが、 どっちに見えても、同じコードです。 同じ区点にフォントによって違う文字があるだけです。 日本語版のMS-DOSでタイプするとき、システムフォントでは半角の ¥ です。

とりあえずやってみる

そもそもコマンドラインツールとは何でしょうか。 定評あるMP3エンコーダLAME(レイム)がその例です。 mitiok.cjb.net から lame-3.93.1.zip をダウンロードしてください。 解凍すると 四角い地味なアイコンの lame.exe というものがあります。 これがコマンドラインツールの例。インターフェイスがGUIでなくコマンドラインなので、 クリックしても使えません。

Windowsの大半のツール=GUI(グラフィック・ユーザ・インターフェイス)
クリックすると起動して、ウィンドウが開く。絵に合わせてマウスを動かすことで、幼児からお年寄りまで安心して使える。
CLI(コマンドライン・インターフェイス)
DOS窓というチャットボードのようなのを使って、テキストでソフトとやりとり。キーボードが使えないと使えない。ディープな世界への第一歩? 一昔前にはこれが当たり前だったのだが……

いわゆるDOS窓(どすまど、dos box)から使います。 DOS窓とは、Windows 2000ならアクセサリのコマンドプロンプト、 Windows 98なら「スタートボタン→プログラム→MS-DOSプロンプト」のことです。 動画作成者はこれを使いまくるので、ランチャーに登録したり、 デスクトップにショートカットを作っておくと良いでしょう (Windows 2000 では WINNT\System32\CMD.EXE 、 Win98 ではC:\Windows\Command.com )

GUIがアイコンクリックみたいに絵をいじることで操作をするのに対して、 DOS窓では文字を入力することによって、作業の指示を出します。 例えば、test.wav というWAVファイルをMP3に圧縮したいときは、
lame test.wav
とタイプして……Enterキーを押します(チャットみたいですね)。

最初の lame は、仕事を頼む相手の名前です(lameちゃんお願い!)。 もしoggencに何かお願いするときは、最初にoggencとタイプします。呪文のお約束。 半角スペースをおいて、test.wav というのは、相手に渡す指令です。 lameはMP3を作るのが仕事なので、test.wav と言われれば「これをMP3に圧縮するのね。了承」 ってな感じで、ただちに仕事を始めます。

仕事の進行状況がしばらく表示され、やがて、done (終わり!)と表示され、 あなたがタイプする番になります。

これで、test.wav があったのと同じフォルダーに、test.wav.mp3 という名前でMP3ファイルができました。

ただこれだけのことなのですが、これができるとできないとでは、できることの世界が決定的に違ってきます。

では、これができるように、必要な設定などをしましょう。 試しに何も準備していない状態で lame を呼び出してみてください。 DOS窓で
lame [Enter]
と呼びかけてみても、
'lame' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。
などと、つれないことを言われてしまいます。 lameとあなたの仲を取り持つDOS窓さんが、lameを呼べっていうけど、どこにいるのよそいつ。見つからないじゃない!とぶーたれてるのです。

「見つからない」というけど、そもそもどこを探してくれたのでしょうか。 というと、DOS窓さんは「サーチパス」(捜索経路)というものに従って順番に探してくれています。 速い話、決まった特別なフォルダのなかだけを探して、そこに見つからないと「見つからない」と言われてしまうのです。 だから、「捜索経路」に入っているフォルダにlame.exeをコピーして入れておけば良いわけです。

とこがサーチパスの範囲か知るには、DOS窓で path とタイプすれば良く、 環境によっても違うでしょうが、Windows 2000 なら、例えば c:\WINNT が、Windows 98 なら c:\Windows がパスに入ってます。だから、lame を c:\WINNT や c:\Windows にコピーしておけば、簡単にどこからでも lame を使えるようになります。 この方法はおすすめではありませんが、簡単なので、とりあえず……というときには良いでしょう。

試しに上記のようなシステムフォルダに lame.exe をコピーしたら、 DOS窓で、
lame -v [Enter]
とタイプしてみてください。 スペースのあとの -v はバージョン教えて、という命令です。今度は冷たいことを言われず、 あなたの声はlameに届き
LAME version 3.93 MMX
などと答が返ってきたはずです。

本格的にやるには

そこで、最も原始的には「使いたいコマンドラインツールはシステムフォルダにぶちこんでおけばいい」 となります。例えばWindows 2000なら、OggencでもAacencでもWINNTフォルダに入れておけば、 それで使えるのです。

システムフォルダに入れるのは手軽といえば手軽ですが、 本来Windowsのシステムが使う場所にごちゃごちゃとあれこれ入れるのは、 潜在的にトラブルの原因となるので、あまり感心しません。 lameひとつくらいならともかく、これから本格的にあれこれやる!となると、 aacenc.exe、faac.exe、flac.exe、lame.exe、MAC.exe、 mkvextract.exe、mkvinfo.exe、mkvmerge.exe、 mp4creator60.exe、mppenc.exe、oggenc.exe、oggencGT3.exe、 wavpack.exe などなど、いろんなコマンドラインツールのお世話になるわけで、 これらを全部システムフォルダに入れると、どれが自分が手動で追加したもので、 どれがインストーラーが追加したもので、どれがWindows自身のシステムファイルか分からなくなってしまいます。 こうしたものをシステムフォルダに同居させてごちゃごちゃすると、 バージョン管理などの見通しも悪くなりますし、 自分が追加した何かを削除するつもりで、間違えてとなりにあったシステムファイルを削除したりしては、 えらいことです。そもそもWindows 98などのデフォルト設定だと、 システムフォルダのなかみが見えなくなっていたり、何かいじろうとするたびに、 「このフォルダをいじるなボケ」とOSから怒られてうっとうしい思いをするかもしれません。

そこで、システムフォルダにいそうろうさせるのでなく、 自分が追加したツールにはそれ専用の場所を用意するのが、明快で良いやり方です。 あなた専用なので名前は何でもいいのですが、DOS窓では日本語をタイプするのが面倒なので、 半角英数字だけで行ける名前にしてください。 ここでは仮に C:\local\bin とします。C:ドライブに local というフォルダを作って、そのなかに bin というフォルダを作って、 自分用のコンポーネントはそこにまとめておくことにしましょう。(binとはバイナリーのこと、 おおざっぱに言えば「プログラム置き場」ということ。付属のドキュメントや入れ替えた古いバージョンなどは、 localにてきとーにためておき、DOS窓から働かせる現役選手だけをbinに入れてやります。 これがフォルダを2段階の深さにしている意味です。)

このやり方の場合、 C:\local\bin のなかに lame.exeを入れれば良いわけです。 (システムフォルダに lame.exe を入れた場合は、そっちは削除してください。) ここで問題は、C:\local\bin がパス(検索経路)に入っていないことです。 DOS窓からlameを呼ぼうとしても、見つからないと言われてしまうでしょう。 そこでDOS窓によく言い聞かせて、 「これから何か言われたら、見つからないとかいう前に C:\local\bin のなかもよく探すんだぞ」と、 話をつけてきましょう。どうやるかというと……

Windows 2000/XP の場合

Windows 2000 や XPでは、マイコンピュータのアイコンを右クリックして、 「プロパティ→詳細→環境変数」のダイアログを開き、 「システム環境変数」の Path を選びます。「編集」をクリックして、「変数値」のいちばん最後をみてください (そこに何が書いてあるかは環境によって異なるので気にしないでいい)。 セミコロンで終わっていたら、そのまま c:\local\bin; と書き足す。 セミコロンで終わってなかったら、自分でセミコロンを書いてから、c:\local\bin; と書き足す。 前との区切りのセミコロンをお忘れ無く。 これで作業は終わり。OKを3回押して全部閉じたら、OSを再起動してください。

Windows 95/98 の場合

Windows 98 の場合は、やり方が違います。 C:ドライブの直下にある autoexec.bat というファイルをメモ帳で開き、例えば
PATH=C:\FOO\BAR
と書いてある行の末尾に、セミコロンで区切って、c:\local\bin を追加してください。上の例なら、
PATH=C:\FOO\BAR;c:\local\bin
もしPATH=という行がそもそもなければ、自分でいちばん下にでも
PATH=c:\local\bin
と書いてください。大文字小文字はどっちでもいいのですが、コロンとセミコロンを間違えないように注意。 ドライブレター(C)の直後の文字はコロンです。 autoexec.bat を上書き保存したら、OSを再起動してください。ちなみにautoexec.batの編集をドジるとWindows95/98は起動しなくなります。万一そうなったらMS-DOSモードで起動してautoexec.batを修正してください…… というか、そうならないように、編集は慎重に。 PATHの行以外はいじらないこと、 PATHを追加するとき半角のセミコロンでちゃんと区切ること。

PATHを通すと…

これ以降は、c:\local\bin に入っているすべてのコマンドラインツールが、 名前ひとつで呼び出せるようになります。 c:\local\binという場所を「探す場所」(サーチパス)に追加したからです。 c:\local\binに「パスが通っている」ということなのです。 このパスは道(path)のことで、パスワードとかのパス(pass)とは関係ありません。

無事にOSが再起動したら、DOS窓を開いて
lame -v [Enter]
とタイプしてみてください。この呪文がlameに届いて返事が返ってきたら成功。 うまくいかない場合や、そもそも自分でパスを通す自信がない場合、詳しい人にやってもらうなどしてください。

パスさえ通しておけば、あとは簡単なのです。 パスが通っていないと、LAMEならLAMEを使いたいたびに、 コマンドの位置をフルパスでタイプしなければならなくなって、 コマンドラインはやりにくい、という誤解につながるのでしょう。

(2) MP3

LAMEを用いたMP3単体の作成法と、 動画の音声としてのMP3の問題(VBRとVBR)を説明します。 物事の順序として、最初にDOSのコマンドを少しだけ説明して、 その後で、それをフロントエンドから使う話をします。 AC3から16-bit WAVに落とさずに直接MP3にする方法を覚えましょう。

コマンドラインの構文

適当な短いWAVファイルを用意して、いろいろな設定でMP3に変換してみましょう。 LAMEでは従来、おすすめの設定がオルト・プリセット --alt-preset という「スイッチ」だったのですが、 3.93では単に --preset でも同じ意味になりました。 短いほうがラクなのでこれから覚える場合 --preset でいいですが、ほかの資料を見るときなどは、 --alt-preset と書いてあっても同じことです。

コマンドラインツールを使うときには、まず処理対象のファイルがある場所に「移動」します。 点滅するカーソルの左側にある記号みたいのを「プロンプト」といって、 それが「いまいる場所」です。例えば
C:\>
と表示されているときには、 Cドライブのルート(根元)が選択されている状態です。 この状態で、c:\test\audio (Cドライブのtestフォルダのなかのaudioフォルダ)に「移動」するには、
cd c:\test\audio [Enter]
とタイプします。cd は「チェンジしろ、ディレクトリを!」というコマンド。 ディレクトリとは、この場合「いまいる場所」というか「現在選択されているフォルダ」のことです。 このコマンドを実行すると、プロンプトが、
C:\test\audio>
になるでしょう。 ひとつ上のフォルダに上がるには、cd ../(UNIX風)またはcd ..とします。 ドライブそのものを変わるとき、例えば、Dドライブに移動したいときは、 何も付けずに d: とだけタイプしてEnterキーを押します。 DOS窓でとりあえず必要なコマンドはこれだけです。たいしたことないでしょ?

DOS窓で日本語文字をタイプするのは面倒なので、 作業用のフォルダ名やファイル名には日本語文字を使わないほうがいいです。

では、c:\test\audio内のtest.wavを標準的な設定でMP3圧縮し my.mp3 という名前で書き出してみます。 それには、次のコマンドを使います。
lame --preset standard test.wav my.mp3 [Enter]

lameの場合、オプション指定のあとの1つめのファイルが入力、2つめのファイルが出力とみなされます。 こうした「構文」はツールによって多少違いますが、 基本的には、入力ファイル名、出力ファイル名、どういう処理をするかのオプション、の3つの事柄を指定します。 lameの場合、出力ファイル名は省略可能で、省略すると入力ファイル名+.mp3で出力されます。 オプションも動作上は省略可能で、省略すれば言うまでもなくデフォルトの設定になります。 しかし動画用の音声ではいろいろと細かいことがあるので、きちんとオプション設定をしなければなりません。

Enterキーを押して実行すると、Encoding test.wav to my.mp3 (test.wavをmy.mp3に圧縮しています)というメッセージが表示され、進行状況表示をへて、やがて done となります。

MP3で良い音にしたいときは、この--preset standardという標準プリセットのオプションが良いでしょう。 音楽ファイルとして単体でも鑑賞にたえる音質になります。 ただし、この場合、動画フォーマットはOGMかMKVにしたほうが良いです。 AVIにする可能性がある場合には、次のいずれかがおすすめです。
lame --preset cbr 192 input.wav output.mp3
lame --preset cbr 160 input.wav output.mp3

注意: コマンドラインでは一般に大文字と小文字の区別があります。 cbr は必ず小文字でタイプします。192とか160というのは、ビットレートの大きさで、大きいほど高音質になります。

上のオプションは、 デフォルトのVBRでなくCBRを選択するものです。 VBRとは音が複雑なところほどビットをぜいたくに使い、音が単純なところではビットを節約する方法。 CBRとは音が複雑だろうが単純だろうが決まった割合(例、毎秒160キロビット)で音声を表現する方法。 VBRのほうが効率的な(したがって音が良い)方式ですが、 192では、CBRでも--preset standardとほぼ同じ良い音質が得られます。 160では、--preset standardには負けるとしても、依然として相当に良い音質です。

単体ではCBRよりVBRのほうが音がいいのですが、 AVI動画の音声でVBRを使うと音ズレ(映像と音のタイミング、字幕と音のタイミングなどがずれてしまうこと)が起きやすくなるほか、CBRに比べてオーバーヘッドが増えてサイズが無駄になるので、 せっかくVBRで「トクをした」つもりでも、トータルではよく分からなくなってきます。 動画の形式がOGMやMKVなら、遠慮なくVBRにしてかまいません。

動画用のLAME MP3では -t スイッチ推奨

→ 別記事「動画音声でのlame: -tを付けないと音ずれ

AVIでの、MP3 VBR(Nandub hack)のオーバーヘッドについて

音声128kbpsのMP3で約175MBのAVIを作ることを考える。 MP3 VBRを使うと、 インターリーブが1フレームごと(デフォルト)のMP3 CBRに比べて、オーバーヘッドが約0.6MB増える。 CBR側のインターリーブが2フレームごとなら1.0MB、インターリーブが500msごとなら1.4MBも、VBRはオーバーヘッドで損をする。 この違いは決して非常に大きいというわけではないが、175MBのAVIにおける0.6~1.4MBの無駄の是非は、考慮しなければならない量だ。

ただし、数値上では「無駄」で使えるビットレートが少し下がっても、 「少しレートの低いVBR」が「少しレートの高いCBR」より高音質になるなら ―― つまりオーハーヘッドの損よりVBR化の得の方が大きいなら ―― 、 結局、VBRには意味がある。損得の評価は微妙だ。基本的には、MP3 VBRを使いたいなら、AVIでなくMKV形式にするのが損がなく、良いだろう。 MKVならハックを使わずに、標準でVBRをMUXできるうえ、 コンテナの構造が効率的なので、オーバーヘッドも少ない。さらに一般に、AVIと比べて、シークも速くなる。

LameでMP3を自分で作るときは、動画音声としては、128やそれ以下にはしないほうが良いです。 なぜなら、128やそれ以下では、Ogg Vorbis や AAC を使えばMP3よりもっと良い音質になりますし、 どうしてもMP3にしたい場合でも、128以下の低レートでは Lame より IIS のほうが良い結果が得られるからです。 (ただし、書いてあることをうのみにせず、一度は自分でABX法の聞き比べをやってみてください。)

VBRのMP3を使うには

VBRのMP3を扱えるようにするには、 VirtualDubMod のOptions | PreferencesのAVIタブで、 上から3番目の By default try processing MP3 VBR streams like Nandub (Nandub互換のMP3 VBR処理を行う)にチェックを入れ [Save] をクリックして、 その設定を保存します。 ここにチェックを入れると、VBRのMP3の読み込みがNandub互換になり、 チェックを外すとノーマル版VirtualDub互換になります。 デフォルトではチェックオフですが、動画作成者は必ずチェックオンにしてNandub互換にしてください。

この意味は次の通りです。

1 AVI動画では基本的にはVBRの音声は使えませんが、Nandub(ナンダブ)というツールでは、 裏技(ハック)を使って、VBRをAVIに結合させることができます。

2 これはあくまでAVIの仕様の隙をつく裏技なので、現状VBR音声の再生ができますが、将来の保証はありません。 また、Nandub互換の動作ができるソフト以外では編集ができなくなります。 VBR音声を使うと、例えば、AviUtlやノーマル版VirtualDubでは編集できないAVI動画になってしまいます。 知らずにAviUtlなどで編集しようとすると、音ズレが起きます。 音ズレとは、映像と音声が合っていなかったり、字幕と音声が合っていなかったり、要するに音と画像がズレてしまうことで、 当たり前ですが動画を快適に楽しめなくなります。 音声がMP3VBRのAVI動画を開いただけで、何もしなくても、 再圧縮をかけたりせず「そのままコピー」するつもりでも音ズレがおきます。 AVI形式でVBRのMP3を使うのはとても危険な裏技である、ということを理解してください。 自分でMP3音声の動画を作るときは、AVI形式にするならVBRにしない(CBRにする)、 VBRを使いたいならAVI形式にしない(OGMかMKV)、というのが賢明です。

3 ノーマル版VirtualDubは、VBR(レートが可変)のMP3を平均したレートのCBRとして処理します。 例えば96Kbps~160Kbpsの間を変動して平均128KbpsのVBRになっているとすると、 その平均レートで読み込んでしまいます(その結果、音ズレが起きます ―― もともと高レートで音が詰まっていたところでは音が画像より遅れ、その反対の場所では音が画像より先に行ってしまいます)。 VirtualDubModでも、デフォルトでは同じ処理をしますが、Nandub互換の動作もできます。 あなたが賢明な性格の人で自分ではAVI動画でVBRを使わないようにするとしても、 友だちが作ったAVIを再編集したりするとき、その友だちがVBRを使っていないとも限らないので、 安全のためにNandub互換にしておきます(そうすれば音ズレせずに再編集できます)。

上の設定にした状態でVBRのMP3をストリームリストに追加すると、 「VBR audio stream detected」(VBR音声ストリームが検出されました)という警告が出ます。

警告の意味。「ファイルこれこれは、MP3 VBRを含んでいるようです。 現在の設定では、この(VBRの)オーディオヘッダをそのままにします。 そうしたければヘッダをCBRに書き換えることもできますが、 その場合、最大○○ミリ秒の音ズレが起きます。 音ズレが困る場合はCBRで圧縮しなおしてください。 ―― 本当にVBRヘッダをそのままにしたいですか」 CBRに書き換えられては音ズレしてしまうので、「はい」と答えて、VBRのヘッダをそのままにします。

音声がVBRになっているAVI動画を読み込もうとしたときも、同様に、 「不適切なVBR音声を検出しました。 現在の設定では、この不適切なヘッダをそのままにします。 もしそうしたければ、適切なCBRヘッダに書き換えることもできます。 その場合、最大で○○ミリ秒の音ズレが起きます。音ズレが困る場合にはいったんWAVに戻して、 CBRで再圧縮してください。 ―― 本当にVBRのヘッダをそのままにしますか?」のような警告が出ます。 VBRを使うことそれ自体が裏技で正規のAVIのヘッダと違うので「不適切」と言っているのですが、 「不適切」なままにしないと前述のように音ズレが発生します。したがって、この場合も、 Do you really want to keep the VBR header? 「VBRヘッダを本当に保ちたいですか」には「はい」と答えてください。

もしデフォルトの設定のまま(VBRはCBRに修正して読み込む)だと、 Do you still want to rewrite the header? 「(音ズレが起きるが)それでもヘッダを書き換えますか」 という別の警告が出ます。VirtualDubModの設定が違っているので、上の説明を参考にチェックボックスにチェックを入れてください。

いずれにしても、VBRのMP3を読み込もうとすると(どちらの設定になっていても)しつこく確認されます。 VBRのMP3はそれだけ音ズレというやっかいな問題をあちこちで引き起こしているので、 「本当にそれでいいの」としつこく念を押されるわけです。 ストリームリストにVBRのまま追加しておいて、 あとはOGMかMKVで保存すれば問題ありません。

設定がNandub互換になっていればVBRのMP3をAVIで書き出すことも可能ですが、 あとあと音ズレの原因にもなるので、明確な目的意識がない限りは、避けてください。

AC3→MP3変換など

lameを使えばWAV形式の音声をMP3圧縮できるわけですが、 実際の動画作成では、出発点になる音声がWAV以外(AC3やMP2)のこともよくあります。 この場合、SSA入門 タイミング編(付・AC3→OGGダイレクト変換) でやっているように、 AC3ならAC3をfoobar2000で開いて、直接MP3に変換すれば良いのです。 MPAの場合は拡張子をMP2に変えればfoobarで開けて、あとは同じです。

foobarで読み込んでConvert | Settingsを開き、設定します。 Use DSPのチェックをお忘れなく。 出力フォーマットではコマンドラインツールを使うので CLI encoderを選択します。 こうすると、foobarは自動的にlameを呼び出すようにできて、ユーザがコマンドラインからlameを使う必要もなくなります。 その詳細を設定するため、[settings...]をクリックして、CLI encoderの設定に進みます。

最初に Preset を LAME にすると、ほかの細かい設定が自動的に標準値になります。 上からみて lame.exe は lame.exe です。 いま説明している例では実体は C:\local\bin にあるのですが、我々はすでにそこにパスを通してあるので、 ただ lame.exe と言うだけで自動的に C:\local\bin のlame.exeが起動されます。 もしパスが通っていない場合には、左の [...] をクリックして、lame.exeがある場所をフルパスで指定する必要があります。

Extensionは出力ファイルの拡張子でMP3のまま変える必要ありません。

Parametersがコマンドラインに渡されるパラメータで、lameの場合の構文はすでに書いたように
オプション 入力ファイル名 出力ファイル名
の順番です。オプションは、標準的な音質重視の設定にするなら、 もともとデフォルトで表示される --alt-preset standard のままでOK。 AVI用にするときは、CBRになるように、--alt-preset cbr 192 または --alt-preset cbr 160 にします。入力ファイル名は本物のファイルではなく、foobar2000 が処理したストリームをそのまま引き継いで処理するので、- (ハイフンひとつ)という特殊指定をします。 これはfoobarのプリセットで最初からそうなっています。 出力ファイル名もfoobarにおまかせして、%d のままで良いですが、 %d を例えば aiueo にすれば aiueo.mp3 と出力されます。

要するに、VBRでいいなら(OGMやMKV)自動表示されるそのままで良く、CBRにしたければ、
--alt-preset cbr 160 - %d
などと書き換えます。

注意: AC3が192Kbpsの場合、 192KbpsのMP3に変換しても「圧縮」にならず(サイズは変わらず)、変換の誤差で音質を損するだけです。 現代の動画ではAC3をそのまま使えるので、そのような場合にはAC3をそのまま使うか、 または再圧縮のメリットがあるように160Kbps以下に変換します。

Highest BPS mode supported はLAMEの場合、24。 というか、ほとんどのコマンドラインツールは24ビットのWAVファイルを処理できます(例外はoggenc 1.0公式版)。 したがって、通常の16ビットで中間出力(パイプライン処理)すると一般に音質面で損をします。 特にもともと16ビットより高い解像度があるAC3音声では、必ず24にしましょう。

参考: いったんWAVで出力してマニュアルで編集したいときは、 24ビット Undithered のWAVで書き出せばOKです。 AC3の音質では24ビットではディザリングする必要ありません。 音質が問題でなければ、通常の16ビットWAVで出力してかまいません。

あとはDSPマネージャでConvert 5.1 to stereoがアクティブになっていることだけ確認して、 設定ダイアログを閉じ、変換を開始します。

MP3音声のファイルが得られたら、VDMでビデオと合体させて、完成品にします。 やり方が分からない人は 「DVD→AVI・OGM・MKV入門」を見てください。

参考: LAMEとIIS

128Kbps程度、またはそれ以下のレートでは、 MP3はOgg VorbisやAACに比べて不利です。 MP3のなかでも、こうした低レートではLAMEはIISに比べて不利です。 したがって、低レートではMP3を使わないほうが良く、もし使うとしてもLameよりIISのほうが良いでしょう。

IISは外部エンコーダもありますが、一般には「ACMコーデック」として用いられます。 上記のlameやoggencやaacencとは、まったく別の方式なのです。 ところで、IISのACMを使えるようにするのは、ちょっと面倒で、 Windows標準では56Kbps以下というばかばかしいレートでしか使えません。 DivX3.11 alphaのパックをインストールすると、その制限を排除できますが、 Windows Media Player 9は、 この「良い」コーデックを見つけるたびに56K制限のある「悪い」コーデックで上書きして、 音質の良いエンコードができないようにじゃまをしてきます。 上書きされてしまっても、負けずに何度でも「良い」コーデックで上書きインストールし返せば良いのですが、 まあ、ちょっと面倒ということは確か。

IISが活躍する範囲ではVorbisまたはAACのほうがもともと上なので、 そうまでしてIISを使うこともないでしょう。なお、LameもACMコーデックとしても使えますが(RareWaresからダウンロードできます)、 トラブルの原因になるので(1. ソフト側が対応していなくてもVBRが選択できてしまう。2. IISコーデックと干渉して一方しか選択できなくなることがある)、明確な目的意識がない限りLameは常に外部エンコーダとして使うほうが良いです。

IISコーデックについては、DivX3とまとめて別に説明します。

豆知識: IISコーデックとは

フラウンホーファー社(FhG)の研究所IISが作ったMP3コーデック。 64~128Kbps程度の低ビットレートのエンコが得意。 ACMの形でWindowsでは正規に無料で使えるのだが、 フリー版にはレート56Kbps以下(つまりひどい低音質でしかエンコできない)という制限がある。 DivX3.11をインストールすると、320Kbpsという超高レートまで無制限に使えるバージョンが付いてくる。 現代の動画としては、低レートでMP3を使うのは不利なので、IISコーデックの活躍の場もなくなってきた。 ちなみに、フラウンホーファーがMP3のパテントに関して、 各MP3エンコーダの作者に警告したのがOgg Vorbis大ブレイクのきっかけとなった。 ユニシスとPNGの関係だ。

ACMとは

音声圧縮マネージャ。 AviUtlで言えば「音声圧縮の設定」のメニューから選ぶことで、 ビデオをエンコしながら、同時進行でオーディオもエンコして、それらを合体させながら出力できる。 こういう使い方ができる音声圧縮がACMと言われるもので、 AviUtlに限らず、VirtualDubほか、不特定多数のソフトから、同じコモンダイアログで圧縮の設定ができる。 要するに Windows側が一元管理してマネージしている。 多くのソフトから汎用的に呼び出せる利点の半面、 独立した外部ツールで個別的に操作するのに比べて(特にコマンドラインツールと比べて)、 きめ細かな圧縮設定ができないことも多い。 大半のユーザにとって、IISコーデックはACMでだけ使える。LAMEは外部ツールとしてもACMとしても使える。

(3) Ogg Vorbis

WAVファイルをOgg Vorbis形式に圧縮するには、oggencというコマンドラインツールを使います。 2003年9月17日現在の公式版はバージョン1.0で、 vorbis-tools-1.0-win32.zipに含まれています。解凍したなかにある oggenc.exe をパスが通っている場所(上の例では c:\local\bin )に放り込んでおけばOK。 コマンドラインから試しに、
oggenc -v
とやってみて、
OggEnc v1.0 (libvorbis 1.0)
のようにバージョンが表示されたら動作可能状態です。 input.wavoutput.ogg にするための oggencの構文は、
oggenc -q 5 input.wav -o output.ogg
のようになります。最初の-q 5 が設定オプションで、 低音質(高圧縮)の0から高音質(低圧縮)の5くらいまでの間で選ぶと良いでしょう。 オプションを省略すると-q 3 が指定された扱いになります。クオリティーは0.01単位で指定でき、 仕上がりサイズの微調整などをかねて、-q 2.75などとしてもかまいません。 要は数値が小さいほど低音質(サイズも小さくなる)、数値が大きいほど高音質(サイズも大きくなる)。

出力ファイル名output.ogg-o+半角スペースのあとに書きます。出力ファイル名を省略すると、入力ファイル名の拡張子をoggに変えたものになります。

公式版1.0には24ビットWAVを処理できないという問題があります。 すぐにも出そうな公式版1.01では解決されると思います。 また非公式版のoggenc(通称「Post 1.0 CVS」)には多くの機能面、音質面の改善があります。 現在非公式に出回っているOggEnc 2.3は入力としてWAVだけでなくFLAC、APE、WVなどをそのまま読み込むことができ、 大変べんり。oggenc2.exeなどの名前でパスが通ったところに入れておき、
oggenc2 -q 0 in.flac -o out.ogg
などと呼び出せるようにしておくと役立ちます。RareWaresからダウンロードできます。

oggencの最高クオリティーは10ですが、ふつう10は使わず、せいぜい5か6くらいだと思います。 音質追求で5や6にするとき、GT3と呼ばれる別バージョンが高音質に強いとされているので、 Vorbisファンは試してみよう。 foobar2000は、Ogg Vorbisのライブラリを標準で内蔵しているので、 外部のoggencをコマンドラインとして呼び出さなくても、自力でVorbisエンコができます。 オプションでGT3のプラグインもあるので、こちらも手軽に試せます (「foobarのページにあるVorbis encoder (GT3) )。 ただし非公式版やGT3ビルドは、あくまでベータ版の性格で、後から不具合が見つかる可能性もあります。

メモ「GT版」とは ―― Garfという人がチューニングしたGarf Tuned版のこと。 高音質エンコ(おおむねq5以上)で公式版系より良い結果が出るとされる。

(4) AAC

AAC(いわゆるMP4)で圧縮するには、 aacenc.exe か、または faac.exe というコマンドラインツールを使うことができます。 foobarからは、どちらも使えるほか、faacに相当するプラグインもあります。 しかし、現段階ではaacencのほうが音が良いので、ここではaacencで説明しましょう。

「MP4」と言ってもaacencが作るAACは実際にはMPEG-2 AACです。 といってもMPEG-4 AACと実質的な違いはありません。

Aacencは、RareWaresの、 Psytel AAC encoder V. 2.15 (Complete Package)に入っています。解凍すると出てくる aacenc.exe と ia32math.dll の両方をパスが通った場所に入れます。 DOS窓からaacenc -hとタイプしてヘルプ画面が表示されたらOK。aacencの構文は次の通り。
aacenc 音質の設定 -if input.wav -of output.aac
音質の設定の部分は、ヘルプ画面にもあるように標準(高音質・推奨)は -normal、 それより下が -streaming もっと下が -internet 、 標準よりさらに上(超高音質)は -extream となっています。入力ファイルは-ifで指定し、 出力ファイルは-ofで指定します。 (Input File, Output File の略)

foobar2000からaacencを呼び出すのは(例えばAC3→AACのダイレクト変換)、 上記のlameの場合とほとんど同様です。CLI encoder の Preset で Psytel AAC を選択すれば、 自動的に推奨設定になります。

出力ファイルが%sになっているのは、オンザフライで直接AACにできず、 一時的にWAV出力してそれをaacenc.exeに渡す設定です。AAC出力まですべてfoobar2000が面倒を見てくれるので、 難しいことを考える必要ないのですが、 24ビット・ディザリングなしでWAV出力してから手動でaacencを呼んでも同じ結果になります。

AAC音声のOGMとMKV

以上の応用として、実際にAAC音声のOGMとMKVを作ってみましょう。 応用といっても、そっちはそっちで1から書いてあるので、易しいと思います。 →別記事「GUIで作るAAC音声のOGM・MKV

付録1: 基本の心構え

PCのオーディオ環境は従来、劣悪だった。 そのため高圧縮・低音質のオーディオが平然と使われた。 このことは、今後問題になるだろう。 360x240の動画が今どきゴミ扱いされかねないように、 64KbpsのMP3などで作った動画は将来ゴミになりかねない。

まず自分が良い音で聴けることが基本。 DivX5を再生できるパワーがないPCで「DivXとXviDの比較議論」ができるだろうか。 それと同じで「ちゃんとまともに再生できない環境では聞き比べなどナンセンス」。 HDの回転音のほうが大きいような環境で「やっぱAACはMP3より音がいいね」などと惚けたことを言わないこと。 また、レビュー記事やウワサをうのみにせず、 面倒がらずにABXをやってみること。 現状、USBヘッドフォンが良いと思う(PCの騒音や外部の雑音のみならず、PC内部のノイズの影響を超越できるので)。 ただ24ビットのままD/Aできず16ビットで処理するところが気分の問題としていまいちだし(差を知覚はできない。 あくまで気分の問題)、今後6チャンネルのUSBヘッドフォンとかも出るだろうから、 もうしばらく様子を見るのも良いかもしれない。

耳までデジタルの線がきて、PC直結で耳にさしこまれるという感じが、 なんともいいですよ……。

付録2: WAVの解像度とディザリング

foobar2000でWAVに変換するときの設定について

16-bitというのは、2003年現在、最も標準的なWAVの「解像度」です。 16ビット(=標準)のWAVはほとんどどのソフトとも相互運用できますが、 24ビットのWAVはそれほど相互運用性がなく、不慣れな状態で不用意に24ビットを使おうとすると、 トラブルの原因になります。したがって、 意味がよく分からなければ、16-bitを選択しておけば間違いありません。

undithered (アンディザード)とは「ディザリング」をしない、という意味です。 「ディザリング」とは、簡単に言えば、デジタル変換特有のギザギザ感を目立たなくすることで、 フォントのアンチエイリアスのようなものです。 AC3ファイルは理論上18~20ビット相当の解像度があり、foobar2000は24ビットないし32ビットの精度で内部的な演算を行っていますから、16ビットWAVにデジタル変換するならディザリング(16bit dithered)をする意味があります (音質の向上が期待できます)。

16ビットの場合、ディザリングをしてもしなくても、ほとんどの場合、明白な差はありませんが、 ほとんど0に近い音量の部分(ゆるやかなフェイドアウトなど)ではディザリングをしないと、 波形がのこぎり状になってブツブツ感が発生する可能性があります。 (例えば「音量が0.5」のピアニッシモという状態を「忠実」にデジタル化すると、 「0になったり1になったり」というプチプチした断続的な音になってしまう。)

実際の動画音声においては、 もし可能なら、 そもそもWAVで中間出力せずAC3から目的の形式(Vorbis、AACなど)にダイレクトで変換すると良いでしょう。

ちなみに、もともと16ビットのデジタルである音楽CDから正確にデジタルコピーした場合も、 ディザリングは不要です(するべきではありません)。 音楽CDのデータは、すでに16ビットで最適化されているはずだからです(もっとも、最近の安っぽいインチキ円盤は保証の限りではありませんが)。 「常にあらゆる場面でディザリングをすると音が良くなるのだ」早合点しないでください。

8-bit WAVを例に

2003年現在、通常のWAVファイルは16ビットで「量子化」されています。 音楽CDと同じです。音の強弱が2の16乗、つまり65536段階のデジタルで表現されるのです。 このくらい細かく量子化すると、量子的(離散的=よく見ると階段状にギザギザ)しているといっても、 人間の耳にはアナログの曲線と等価です。 これを8ビットに落とし込むということは、音の強弱を2の8乗=たった256階調にしてしまうことです。 これでは電話の音声のようなもので、人間の耳でも明らかに自然な音声と違うことが分かります。

16ビット(65536階調)のWAVを8ビット(256ビット)に落とし込めば、 デジタル特有の「キザキザっぽさ」「カクカクっぽさ」が激増することは明らかです。 解像度を変更するときに、「よく見ると階段状になっている輪郭線を少しだけわざとぼやかして、 なるべくギザギザ感が目立たないようにすること」が「ディザリング」です。 フォントなどの「アンチ・エイリアス」と同じようなものです。 「輪郭をぼんやりさせる」ということは、オーディオファイルの場合、意図的に微量のノイズを加えることです。 それをどのように行うかが「ディザリングのアルゴリズム」と言われるものです。

変換先が8ビットでは、どうあがいてもギザギザ感を消せませんが、 24ビットのデータを16ビットに変換するときは、ディザリングをするかしないかで、 微妙な音質に影響する可能性があります。

16-bit WAV の問題

ディザリングするしない以前に、最終の圧縮に行く途中で無意味に16ビットWAVで中間出力しないこと(特にAC3)。 WAVを編集したいとき、こだわるなら24ビット(以上)で中間出力し、 どうしても16ビットしか受け付けないツールを通す前だけディザリングする (ディザリングのアルゴリズムがまたいろいろあって、こだわりだすと奥が深い)。 ただしCDのように音源自体が16ビットなら話は別で16ビットで良い。

16ビットはCD音質であり、通常、知覚上はアナログと区別できない。 市販のUSBヘッドフォンも解像度は16ビット。 最終形としては、必ずしも24ビットにこだわる必要はないが、 誤差が蓄積しないように中間過程はできるだけ過剰の精度で行う。

16ビットを仮に整数の精度とすると、24ビットは0.01のオーダー。 例えば、「3.31、4.71、2.22」という音量を2倍すれば、6.62、9.42、4.44となり、 整数に丸めると、7、9、4である。0.01の精度で中間処理すればそうなる。 しかし「3.31、4.71、2.22」を最初に丸めて3、5、2とすれば、2倍処理の結果は「6、10、4」となり、 高精度演算の結果「7、9、4」とずれてくる。これが誤差の蓄積であり、 最終出力が整数精度でも中間を過剰の(0.01の)精度で行うことの意義である。 16ビットでむやみに中間出力することは、そのような危険を伴う。 「2倍する」という処理で言えば、確率的に、全標本の約50%が1単位ずれる。 通常、耳で聞いて分かる差にはならないので(16ビットの1単位の差というのは、 6万分の1のオーダー)、こだわりすぎてはいけないが、基本的な問題として認識はしてほしい。

同様の理由から、ノイズフィルターをかける場合、 ノイズ除去する前にノーマライズ(最大化)しないこと。 ノーマライズは後に。

DivX/XviDの設定やAviUtlのフィルターの設定パラメータの1の違いに神経質になるくらいなら、 もっと音のことも気にしましょう……。

リンク

シリーズ

この記事のURL



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