WebMへのエンコード方法(ffmpeg編)
前の記事ではFlixWebMという製品を使ってwebmファイルにエンコードする方法を書きましたが、
このエントリでは
「WebMパッチを当てたffmpeg」
を使ってwebmエンコードを行なう方法について書いてみます。
といっても、自分はあまりffmpegをちゃんと使えてないので、やってることは基礎だけです。
アホな間違いとかもあるかもしれないんで、変なとこあったら教えてくださいませ。
■WebM対応パッチを当てたffmpegの入手
WebMの公式サイトで、ffmpegのWebM対応パッチが公開されていますが、
使うためにはそれをビルドしてffmpegの実行プログラムを作ってやる必要があります。
自分でビルドできればそれにこしたことはないのですが、私には無理です。
そんなわけで他の人がビルドしてくれたものを探してくる必要があります。
DTV板のWebMスレや、バカポさんの記事を読んで、
WebM+ffmpeg Win32 Build (A Dolphin's Journal of Events)
でWebM対応ビルドが公開されていることを知ったので、それを使わせていただくことにしました。
最初にリリースされていたのはr2パッチ対応ビルドでしたが、
現時点ではr3パッチ対応ビルドもリリースされているようです。
※2010.5.27追記
このffmpegだと、音質が悪いという弱点もあるようです。
詳細についてはこちらの新しい記事のほうでまとめました。
■ffmpegを使ったwebmエンコード
とりあえず、秒速5センチメートルの公式サイトにある
予告編(1280x720、8Mbpsで24.3MBのWMV)を使ってエンコードに挑戦。
上のffmpeg配布サイトを見ると、
「エンコードはめっちゃ遅いでぇ~。オプションで-level 300を指定すればちっとは速くなるでぇ~。
ま、そんかわり品質についてはなんとも言えんがなぁ~。」
と書いてあるので、それだけ指定して、以下のコマンドでやってみました。
(使ったのはr2パッチ対応ビルドです)
ffmpeg -i H:\byosoku.wmv -vcodec libvpx_vp8 -b 2000k -level 300 -acodec vorbis -ab 128000 H:\byosoku.webm
※2010.5.27追記
r3ビルドでは、音声コーデックの指定はlibvpx_vp8ではなくlibvpxになっているようなので注意。
うはwww途中でffmpegがクラッシュしちゃったwwww;;;;;;
んー、よくわからんけどwmvをそのまま渡したのがよくなかったのだろうか・・・。
そんなわけで、wmvをAviUtlのDirectShow File Readerで読み込み、
「Huffyuv(YUY2圧縮OFF)+PCMのAVI 1.0ファイル」にエンコード。
(わざわざRGB圧縮にしたのは前の記事で使ったFlixWebMがRGB圧縮のものしか読めなかったためです。)
そして再チャレンジ。コマンドは入力ファイルがAVIに変わっただけでさっきと同じ。
ffmpeg -i H:\byosoku.avi -vcodec libvpx_vp8 -b 2000k -level 300 -acodec vorbis -ab 128000 H:\byosoku.webm
※2010.5.27追記
r3ビルドでは、音声コーデックの指定はlibvpx_vp8ではなくlibvpxになっているようなので注意。
おお、今度はちゃんとwebmファイルができたよ~! ヽ(゚ ヮ ゚)ノ ワッホイ!
出来上がったwebmファイルをMediaInfoで見ると、
ファイルサイズ: 12.9 MiB
オーバルビットレート: 2376 Kbps
となってますね。映像と音声それぞれのビットレートは表示されませんが、
ビットレート指定を大幅にオーバーしたFlixWebMとは違い、それなりに指定サイズになってくれました。
出来上がったwebmファイルを、WebM対応のFirefoxと、MPC-HC、WMPで再生してみたところ、
再生負荷は以下のような感じでした。 再生方法の詳細は前の記事に書いたので、そちらを参照して下さい。
Firefox: ちょくちょくカクつく。スムーズな再生は無理。
MPC-HC: かなりスムーズだが、たまにカクつくことがある。
WMP: スムーズに再生できる。
ただ、うちのPCは
CPU: Celeron M423 1.06GHz
メモリ: 1.5GB
グラボ: Intel 945GM
という4年前のノートPCなのでほとんど参考にならないと思いますw
画質面についても、自分は細かいことを気にしないほうですし、
オプション設定もさっぱりなのでちゃんとした評価とかはできません。
そういえばx264の開発者であるDark_Shikari氏の評価によると、
VP8, as a spec, should be a bit better than H.264 Baseline Profile and VC-1.
It’s not even close to competitive with H.264 Main or High Profile.
訳:VP8はH.264のBaseline Profileや、VC-1よりちょっとマシなくらいの位置づけ。
H.264のMain ProfileやHigh Profileにはとても及ばない。
とされているようですね。ただ、それと同時に
With this in mind, I expect VP8 to be more comparable to VC-1 or H.264 Baseline Profile than with H.264.
Of course, this is still significantly better than Theora, and in my tests it beats Dirac quite handily as well.
訳:これらを考えるとVP8はH.264そのものと比べるよりも、VC-1やH.264のBaselineProfileと比べたほうがよさげ。
当然だがVP8はTheoraより明らかに優れているし、私のテストではDiracよりも優れているようだ。
とも書かれているので、高品質な映像をオープンソースで提供するなら現状VP8がベストということになりますね。
まあそうでなければわざわざOn2社を買収する必要はなかったわけなので当然ですが。
性能等はこれからも改善されていくでしょうし、特許問題さえ出てこなければ十分普及するのかな。
なお、上記のffmpeg配布ページでは、VP8用に対応しているオプションについても細かく書いてくれています。
色々な設定ができるようですし、2passエンコードも可能なようですね。
自分にはよくわかりませんが、FlixWebMなどでは細かい設定はできませんし、
今のところWebMへのエンコードで色々設定できるのはffmpegだけだと思うので、
色々と試してみるとよいと思います。
(VP8へのエンコードに限れば公式のivfencというプログラムで色々設定できるようですが、
ivfencで作成したivfファイルをwebmファイルに変換する方法はまだないらしい。)
| 固定リンク
この記事へのコメントは終了しました。


コメント