twitter ■お問い合わせ当サイトへのリンクサイト仕様

現在位置 > LostTechnology > Movie > XviD+OggVorbisでビデオ保存

XviD+OggVorbisでビデオ保存

ビデオキャプチャーやHDDビデオレコーダー、DVDレコーダーなどで使われているMPEG2は、いざ保存しようとするとあまりのファイルサイズのでかさに保存が困難なことを思い知らされます。「XviDでビデオ保存」では映像部をXviD(MPEG4)、音声部をMP3で圧縮するAVIファイルとする手順を紹介しました。圧縮手順も再生も安定したものとなっていますが、その手順も今となっては簡素化ができるようになり、そろそろ更新しておこうと思ったわけです。

MPEG4の仕様に準拠してMP4を作成するのは、再生側のサポートに不安がありすぎるので現状では却下。となると、現時点でベターなのは映像部にXviDを使用して音声部にOggVorbisを使用するOGMファイルの作成ではないかと判断しました。よって、ここではその作成手順を公開します。XviDでビデオ保存の頃と比べ、使用するファイル類が異なります。OGMファイルじゃなくAVIファイルを作成したいという人は、紹介している手順の注意書きをよくご覧になってください。AVIファイルでの作成方法も記述していますから。

OGMファイルのメリット

まずはAVIファイルと比較した場合のメリットを列挙します。デメリットはOS標準ではないので再生時にOggDSが必要となるぐらいでしょう。

OGMはOS標準サポートではないためにOGMファイルをダブルクリックしても再生できません。WindowsXPならばファイルをダブルクリックした時に開き方がわからないファイルはどのような動作をするかを問われるので、「一覧からプログラムを選択する」でWindows Media Playerなどに割り当ててしまいましょう。そうすれば普通に再生できるようになります。Shiftキーを押しながらOGMファイルをダブルクリックすればWindows98などでも関連付けが可能。もっとも、それ以前に拡張子をAVIにしてビデオファイルを作成してしまえば、OggDSをインストール済みの環境ではAVIと同様に再生できてしまいます。区別を付けるために、"*.ogm"の代わりに"*.ogm.avi"としておけばよいでしょう。

Ogg File用のアイコンを用意したので、それに付属するJScriptを実行することで、拡張子を.aviにしなくても再生をWindows Media Playerに割り当て可能。

用意するもの

  1. XviD CODECのbinary (Koepi's)
  2. AVIUTL
  3. MPEG-2 VIDEO VFAPI Plug-Inと必要ならLanczos 3-lobed 拡大縮小プラグイン
  4. ジャンプウィンドウ ←YUY2フィルタモードでは使えないが必須アイテム(これで編集してからYUY2フィルタモードが吉)
  5. oggdropXPd (or lamedropXPd)
  6. VirtualDubMod or VirtualDubMod日本語版
  7. ffdshow←再生用
  8. OggDS←再生用
  9. LameACM(音声を高BitrateのMP3でAVIにするなら)
  10. OggMux(120fps映像のOGM作成時に必要)
  11. VirtualDub(オリジナル)(音声を別途用意する手法での120fpsのAVI作成時に必要)

この手順ではキャプチャーカードが音声部を""MPEG-1 Audio Layer2""で記録しているか、AVIファイルで素材が用意されていることを前提にしています。それ以外の音声の場合は、あらかじめDVD2AVIなどで音声部をWAVファイルに切り出しておきましょう(「XviDでビデオ保存」を参照)。

MPEG-2 VIDEO VFAPI Plug-Inはフリーソフトウェアではありません。研究用のソフトウェアです。フィードバックを本業に活かすのではないかと思われます。したがって利用条件をよく読んでからご利用になってください。

ここで紹介する手順はXviDの2003年7月頃のBuild(Koepi's:XviD-24062003-1.exe, Nic's:16/07/03[used])を使用した場合のものです。正式版である1.0.0以降のBuildはXviDの設定を参照してください。

MPEG-2 VIDEO VFAPI Plug-Inを設定

まず最初にm2vconfを実行して初期設定を行ないます。この設定は1度だけ行なえばよいので次回からは省略可能。実際に使用している設定は速度優先で以下のようにしてあります。

  1. アスペクト比:無視
  2. フィールド順:ソースフレームを維持
  3. YUV→RGB変換:ITU-R BT.601から伸張
  4. 色空間行列:自動認識
  5. GOPリスト:GLファイルを保存しないのみにチェック
  6. 連番ファイル:結合して開く(ビデオカプセルが複数のファイルに分割されて保存されているVAIOは選択推奨)
  7. TDCT関数:整数(32bit AP-922)
  8. CPU拡張:環境による(付けられるだけチェック)

AVIUTLでの設定

MPEG-2 VIDEO VFAPI Plug-Inをインストールしておけば、AVIUTLで直接MPEG1/MPEG2ファイルを開けるようになります。

AVIUTLを起動して編集したいファイルを開いてください。ビデオカプセルが分割されている頃のVAIOの場合(Giga Pocket V5.x未満の場合。Giga Pocket V5.xは1番組を1個のMPEG2ファイルで保存するので扱いが楽になっています)は、書き出しでMPEG2ファイルを作成するか、D:\Giga Pocketの*.SSG(Sony Split MPEG)をAVIUTLにドラッグ&ドロップしましょう。

実写の場合

  1. インターレースの解除:自動,トップフィールド->ボトムフィールド
  2. ノイズ除去フィルタ:強さ64,範囲2,しきい値24(ノイズが激しい場合を除き基本的にノイズ除去は使わない
  3. クリッピング:映像のない黒部分がなくなるように調整
  4. Lanczos 3-lobed拡大縮小:X640,Y480,SSE2整数(AVIUTL標準のサイズの変更で640x480でも可)
  5. 音量の最大化:256

アニメの場合

  1. インターレースの解除:自動24fps〔しきい値80,範囲16,横縞部分を二重化〕,トップフィールド->ボトムフィールド
  2. フレームレートの変更:24fps<-30fps(4/5),24fps<30fpsの間引きには自動24fpsの処理を使う(元が24fpsの場合のみ)
  3. ノイズ除去フィルタ:《サイズ優先時》強さ256,範囲2,しきい値24、《通常》強さ160,範囲2,しきい値32、《デジタル放送》未使用
  4. ノイズ除去(時間軸)フィルタ:強さ128,範囲2,しきい値40(地上波なら画面が波打つような感じだったりノイズが多い時、デジタル放送ではソースが古くて劣悪な番組のみ使用)
  5. クリッピング:映像のない黒部分がなくなるように調整
  6. Lanczos 3-lobed拡大縮小:X640,Y480,SSE2整数(AVIUTL標準のサイズの変更で640x480でも可)
  7. 音量の最大化:256

Y/C伸張(該当Pluginや拡張色調補正の「TV -> PC スケール補正」)は通常使ってはいけません。これはオーバーレイ再生時に伸張することをMicrosoftが推奨しているためです。ほとんどのビデオカードは再生時にY/C伸張し、nVidiaのビデオカードだけ伸張せずに暗い映像で再生されます。永久にnVidiaのビデオカードをチョイスして心中する覚悟ならともかく、そうでないならばY/C伸張をしないほうがよいのでは?

共通設定(環境設定)

0.99からは追加されたYUY2フィルタモードは実写のみ使用します。このモードはVirtualDubのFast recompressでお馴染みのモード。映像の色空間の変換をしなくなるぶん高速です。うちの環境と設定では、24分前後の番組の場合ですが、Pentium4/3GHzで0.98までは90分前後掛かっていた圧縮が60分前後で済むようになりました。

自動24fps処理がYUY2フィルタモードでよく誤動作しますが(チェック解除では大丈夫)、30fpsの実写は無問題で完全移行可能。

AVIUTLで編集

圧縮の設定ができたら不要な部分を取り除きます。AVIUTLの右下にある4つのボタンは、左から1つ前のフレームへ移動、1つ右のフレームへ移動、範囲選択の先頭に指定、範囲選択の末尾を指定なので、不要な部分を範囲選択しましょう。カーソルキーやPageUp,PageDownキーも前後のフレームを参照できるので、それらを使って選択していきます。範囲選択した不要部分を除去するのは、編集から選択範囲のフレーム削除です。必要な部分だけになったら、音声と映像を出力します。

音声部をMP3にして普通にAVIファイルにするのであれば、ここで音声部分のCODECをMP3にして映像と一緒にAVIファイルとして書き出してください。AVIファイルであれば作成はこの段階で終了です。OS標準だと56kBit/sが上限ですが、LameACMを入れておけば128kBit/sなどでMP3圧縮できます。圧縮はCBRのみ。ABRやVBRだと音がズレます。

ファイルのWAV出力から、まずは音声を保存します。オーディオ圧縮は無圧縮の"PCM 48.000kHz, 16ビット, ステレオ"です。

続いて映像部を出力します。圧縮の設定は、XviDのどのBuildを使うか、そして個人的な好みにもよるので一概にはこれといえません。Root(Stable)版のXviDででB-Frame使わないならば「XviDでビデオ保存」と同様、Developer(Unstable)版でB-Frameを使う場合には以下のような設定で圧縮をしています。記述はLoard Default後に確認している部分で、それ以外は初期値のままでいいか気にしてない項目です。

ここでの設定は当時のものであり、正式版のXviD1.0.0以降を使う場合は「XviDの設定」を参照してください。というか、今さら正式版以外を使うのは意味がないので正式版を使いましょう。

  1. Encoding Mode:1 Pass - quality(実写は後述する2Passを使うことが多い)
  2. Quality:95(B-Frameは画質が悪化しやすいので品質の基準値を高くする)
  3. Motion search precision:6 - Ultra High
  4. Quantization type:New Modulated HQ(アニメはH.263のほうがサイズが小さくなることが多い)
  5. FourCC used:XVID(DX50にするとDivX5.0.xで再生可能、DIVXにしてB-Framesなどを使わなければDivX4系で再生可能)
  6. VHQ mode:4 - Wide Search(Offと比較して圧縮速度が激減することに注意)
  7. Enable lumi masking:Off(ソースによっては有効にすることもあり)
  8. Maximum B-frames:2(-1だとB-Framesを使用しない)
  9. B-frame quantizer ratio:200
  10. B-frame quantizer offset:100
  11. DX50 B-VOP compatibility:On(FourCCをDX50にするならOn必須)
  12. Packed bitstream:Off(新しいデコーダーで再生するならOn推奨)

MPEG4系のCODECは横方向のサイズが16の倍数である必要があります。それ以外のサイズだと、映像が緑になってしまうなど正しく再生できないデータとなることがあるので注意しましょう。

OggVorbisに圧縮(OGMでいく場合)

WAV出力でできた音声ファイルは、oggdropXPdでOggVorbisに圧縮します。oggdropXPdを右クリックし、Encoding Optionsで圧縮設定を行ないましょう。Quality Management Modeで品質を決定します。Qualityは0~2ぐらいでよいのではないでしょうか。設定を決めたらoggdropXPdにWAVファイルをドラッグ&ドロップして圧縮を開始しましょう。WAVファイルと同じフォルダにoggファイルができあがります。

MP3に圧縮(AVIでいく場合)

ファイルサイズが大きくなりますが、OggVorbisの代わりにlamedropXPdでMP3に圧縮してもよいでしょう。ABRやVBRの128kbpsなどのMP3にします。

映像と音声を結合

XviD(AVIで用意)とOggVorbis(ogg)を結合するには、VirtualDubModを使います。VirtualDubModを起動し、まずAVIファイルを開いてください。そして、ビデオ(Video)からビデオを変更せずコピー(Direct stream copy)を選びます。ストリーム(Streams)からストリームの一覧(Stream list)を選び、追加(Add)を押して音声ファイルを指定しましょう。あとはファイル(File)から名前を付けて保存(Save as)でOGMファイルを出力するだけです。初期状態ではAVIファイルの出力になっているので、必ずOgg Media File(*.ogm)を選んでください。もし出力時にエラーになる場合は、最新版でなくちょっと前のバージョンか日本語版を試してみましょう。

なお、ファイルの保存時に、"OGMだけど拡張子はAVI.ogm.avi"のように、ファイル名を""で括ると拡張子を強制指定して保存できます。拡張子がOGMだとファイルの関連付けを行なわないと再生ができませんが、AVIと偽装してOSを騙すことでプレーヤーを起動し、OGMを簡単に再生することが可能です。

AVIファイルは可変ビットレート(VBR/ABR)をサポートしていません。lamedropXPdなどで作成したVBR/ABRのMP3は、特殊な処理をしないと正常にAVIファイルにできず、(再圧縮なしでも)音ズレが発生します。VirtualDubModの場合は、OptionsからPreferences...を選び、VDubModのAVI設定欄にある"By default try processing MP3 VBR streams like Nandub"にチェックを付けておけば対処してくれるので、チェックを付けておいたほうがよいでしょう。

VirtualDubMod日本語版だと音声の指定と出力方法が異なります。音声ファイルの指定はOGMから入力の表示を選び、そこで追加ボタンから行ないます。OGMファイルの出力は、OGMから名前を付けてOGMを出力です。この日本語版がベースにしているバージョンでは、特に設定をしなくても音声をVBR MP3で読み込むとちゃんと処理してくれるので安心です。

120fpsのAVIファイルを音声と結合する場合は、VirtualDubModは120fpsに対応していないので使ってはいけません。少なくとも120fps化する際に利用するNULLフレームを正しく処理できずにおかしなデータが出来上がります。再生するとコマ落ちしまくるとんでもないデータになってしまいます。OggVorbisと結合するならばOggMuxを、MP3圧縮-Waveファイルと結合するならばVirtualDub(オリジナル)を使いましょう。ちなみにVirtualDubModで作成するデータよりもOggMuxで作成するデータのほうがサイズが小さくなることがあるので、24/30fpsでもサイズ面ではOggMuxを使うメリットがあるかも……。

2Passでの圧縮

DVD-Rにデータを保存するならば1Passのみでもそれほど問題はありません。しかし、動きの激しい実写番組や長時間の番組をできるだけ高画質なままCD-Rに納めたいという場合もあります。その場合は2Passで圧縮しましょう。

圧縮設定を「Encoding Mode: 2 Pass - 1st pass」にして1度目の処理を行ないます。これが終わったら、「Encoding Mode: 2 Pass - 2nd pass Int.」にし、「Desired size [Kbytes]」に映像部で使用するファイルサイズを指定して圧縮しましょう。CD-Rの容量から音声ファイルのサイズを引いた数値にすればCD-Rに収まるファイルサイズになるわけです。実際には指定したサイズよりも多少大きくなったり小さくなったりするので、ある程度の余裕を持った指定をしたほうがよいかもしれません。

2Passで膨大な時間を掛けてられないという人は、1Passでbitrateを指定して圧縮しましょう。ビットレート計算機を使うとbitrateから出来上がりのサイズが推測できます。ただし、その場合は画質に過剰な期待をしてはいけません。

サイズを抑えたいが2Passで圧縮するほど時間を確保できないというのであれば「1 Pass - quantizer」モードを使ってください。5~7ぐらいでかなり小さなファイルサイズでそこそこ良好な画質のデータが出来上がると思います。数値を大きくするほど出力されるファイルサイズが小さくなるけど画質は低下するので、圧縮したいデータの動きの激しいシーンだけを何度か数値を変えて圧縮し、妥協できる値を探してみましょう。画質と時間のバランスを考えるのなら実写はこのモードがよいかも…(Qualityと動作結果は同じだけど実写とアニメで別設定にしたい場合はQualityとquantizerにしておくとCODECの設定が流用しやすくて楽なわけね)。