mpegからmkvまでの過程

録画したMPEG2形式の動画から、とあるCMだけ切り離して保存したくなった。MPEG2形式そのままだとサイズもでかいしつまらないので、他の形式にエンコードしてみることにする。動画作成は、昔少しだけやってみた事があるので、一応の基礎知識と一通りのツール知識程度ならある。まぁ、ちょっとかじった程度だけど…。というわけで、その動画を作成するまでの過程のメモ。

今は以前よりもコーデックやらコンテナやら、色々と選択肢が増えてるので、少し勉強してみる。長期保存が目的なので、なるべく将来性がありそうな物を考える。将来性とはこの場合、10年後のPCで普通に再生できそう、ぐらいの意味。
今よく使われているビデオコーデックには、DivXXvidWindows Media Video (WMV)H.264といった物がある。要するにMPEG4技術を用いた物。一番将来性がありそうなのは、Blu-ray DiscHD DVDに採用され、MP4コンテナにも収める事ができる、H.264…かな。将来的な環境互換性はかなり高そう。少なくとも、他3つよりは。最後発という事もあり、圧縮率も比較的高いと聞く。ただ、最後発という事がネックでもあり、エンコーダ(ここでは、x264を想定)が未だ成熟していないらしい。
オーディオコーデックには、MPEG4オーディオことAACを。本当は録画した時のAC3を直接使って再エンコード無しで使った方がいいのだろうけど、AC3はどうやらMP4コンテナに入らないようだし、ドルビーのライセンス料が高いせいか、対応するプレイヤーが意外と少ない。それに、H.264との噛み合わせならAACが最適だろう、と。Windows Media Playerがそのうち対応するという話だし、携帯プレイヤーなどでも普通に対応するようになってきたし、将来性という面では不安はないけど、問題はエンコーダの確保。一応Nero持ってるから何とでもなるんだけど…。LameとかVorbisみたいな、フリーで頑張ってるようなエンコーダは無いものか。
で、そのビデオとオーディオをまとめるコンテナは、aviを使うのも芸が無いので、MP4…と行こうと思ったけど、何となくどんなコーデックでも収められてしまうという、MKV(Matroska)形式に心惹かれる物が(笑)。こちらの方が作成環境は色々整ってるみたいだし、何か楽そう。とりあえず、ogg vorbisみたいに徐々に普及してくれる事を祈りつつ、mkv形式で作る事に。まぁ、ダメならコンテナを入れ替えればいいだけの話だしね。

で、色々試行錯誤した手順は以下の通り。

AviUtlでMPEG2から目的の動画を、x264を用いてH.264コーデックのavi形式にエンコード(AviUtlでMPEG2を読み込むのに、MPEG-2 VIDEO VFAPI Plug-Inが必要)。ちなみに、x264の設定で「MBs&Frames」タブの「8×8 Transform」にチェックが入ってると、Quicktimeで上手く再生されなかったような覚えが。

AviUtlでMPEG2のオーディオが抜き出せないので、VirtualDubModでオーディオをWaveファイルで取り出す(最初からこっちでエンコードすれば良かった…でもフィルタの設定がよく分からん)。

Waveファイルをノーマライズした後、Neroを使ってAACにエンコード。ちなみにこの時、「ISO 13818-7 AACトラックのエクスポート」にチェックを入れるとmp4形式ではなくaac形式を吐き出してくれる。ちなみに、世の中にはNeroのAACエンコーダdllを使ったフロントエンドがあるそうで。Neroの体験版をダウンロードして、dllだけ抜き出してしまうとあら不思議、AACエンコーダのできあがり、という寸法。

VirtualDubModでMKVコンテナを作ろうと思ったら、何か上手くいかないので、mkvtoolnixで作る事に。ところが、ここでも警告が出て作成失敗。調べてみると、どうやらVFW(Video For Windows)コーデックから作った動画とコマンドラインから作った動画の違い…という事らしい。(参考:H.264/AVC – AviUtl実験室)。えーっと…Windowsが動画を扱うためのインターフェース規格がVFW…ってな感じかな?AVI形式は、そのVFWに対応したコーデックをサポートしたコンテナ…ということになるのか。一応、MKVでもこのまま無理矢理VFWのH.264コーデックを使う事はできるみたいだけど、それはどうやらイレギュラーな事のようだ。という事は、AVIにもH.264は入れない方がいいという事になるのだろうか。うーん、よく分からん。

このままではどうしょもないので、コマンドラインで再エンコードするか、変換するか。しかしコマンドラインから再エンコードする場合、AviUtlが使えず、フィルタがかけられないという事に…。えーっと、コマンドラインからエンコードする人は、どうやらAviSynthという物を使っているようだ。スクリプトを書いてフィルタをかけたりするそうだけど…、いや、さすがにそこまでしたくない(笑)。というわけで、変換。

MP4Boxを使う事で、VFWからCLIのH.264に変換できるらしいので、やってみる。ここでは、GUIフロントエンドYAMBを使う。
「Extract」タブで、AVIファイルから生のH.264動画をh264ファイルとして取り出す。「Mux」タブで、先程のh264ファイルからmp4動画を作る。この時、(「Option」タブで「View Import Optins directly」にチェックが入ってれば)「Import Settings」という設定ウィンドウが出るので、「Force Frame Rate」にチェックを入れ、フレームレートを適切に設定する(普通は29.97か23.98)。これやらないと25fpsになって、音声と動画がずれるようだ。フレームレートの情報を保持してないのかなぁ。

これであとは、このMP4と最初に作ったaacをmkvtoolnixでmuxすると、めでたくH.264ビデオとAACオーディオを持つMKV形式の動画の完成。
この方法は自分で好みの設定で動画を作れるけど、ハッキリ言って非常に面倒くさいので、他人には絶対に勧めません(笑)。H.264の辺りの技術はまだ世に出てきて間もない事もあって、便利なツール類があんまり充実してない(対応してない)という事はよく実感できた。
一番引っかかったのがVFWの辺りなので、この辺の変換がもっと簡単にできるといいんだけどね。

ちなみに、これをMP4コンテナに移し替えて、QuickTimeのようなMP4対応プレイヤーで再生できるかどうかは知りません(笑)。H.264のエンコード設定によって、デコーダが対応できない事があったりするらしいので。この辺はまだ未成熟らしい…。
あれ、という事は当初の目的の「将来性」が達成されてないような…、ま、いいや。

追記

そうか、Huffyuvみたいな可逆圧縮で一度フィルタをかけた動画を生成して、それに対してコマンドラインからエンコードすればいいのか。…でも、15秒で80MB越えるのはなぁ…。まぁ長時間の番組をエンコードする気は無いんだけど。


Posted by:

Posted At:

Modified At:

Category:

Tag:

コメント

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください