動画の可逆圧縮

久々に動画をいじいじしてるのだけど、

その中で紙芝居のような動画を生成するようなことをしていた。

この動画はこの後、別のソフトで他の動画や音声と合成してH.264でエンコードして完成とする予定なのだけど、

生成した紙芝居動画は一旦ファイルに書き出す必要がある。


無圧縮のAVIで書き出すのが標準の選択肢だが、無圧縮のAVIとかとんでもない容量になるのは目に見えてる。

それでも現在のコンピュータならなんとでもなるだろうが、あまりよい選択肢ではないだろう。

じゃあ、AVI生成時に選択することができたMPEG-4で圧縮してみようと、圧縮したAVIを生成してみた。

多分、自然画像ならそれほど違和感はないのだろうけど、絵の場合、圧縮時に生じたノイズが思いの外目立つ。

もちろん最終的にはH.264でエンコードするときにノイズが入ったりするのだろうけど、

紙芝居動画の生成時に生じたノイズに加えて、最終の動画の生成時にまたノイズが入るとなると、それは残念だ。

なんかいい方法はないもんか。


そこで思い出したが、世の中には可逆圧縮の動画コーディングも存在するんですね。

Huffyuvが有名なのでこれを導入しようと思ったのだが、どうもうまくいかない。

64bit版Windowsではinfファイルをいじるように書かれていたのだが、いじってもうまくいかない。

うーん、とおもって探してたら、Lagarithなら64bit版でも導入しやすいと紹介されていたのでこれを導入することにした。

Lagarith Lossless Video Codec

“the compression is typically only 10-30% better than Huffyuv”なんて書いてあるから、Huffyuvより性能もいいようですね。

早速導入してみた。そしたらAVI出力時にLagarithが表示されるようになったので、これを選択すればいい。

設定を選ぶといくつか設定できるのだけど、Use multithreadingはまずチェックしとくべきでしょう。

Enable Null Framesもチェックを入れておくと、全く同じフレームはNullフレームを挿入して飛ばすので、

動きのほとんどない紙芝居のような動画では大きな容量削減効果がある。

ただ、使うソフトによってはトラブルになることもあるようなので事前にテストしてからの方がいいだろう。


実際どんなもんか使ってみた。

処理速度だが、無圧縮AVIを生成するのと同じか速いぐらい。

圧縮の処理自体は現在のコンピュータの性能なら軽々できるのだろう。

圧縮により出力されるファイルの容量が小さくできるから、I/Oが減り総合的には速くなることも不思議ではない。

そして出力されたファイルの容量だけど、なんと無圧縮の1/20の容量で済んでいる。

動画の可逆圧縮は一般には1/2~1/4ぐらいの容量にしかならないと言われるけど、

このような紙芝居動画では圧縮効果がかなり高いようだ。この容量削減にはNullフレームも大きく寄与していることだろう。

フレームレートや解像度にもよるけど1分そこらで1GBにも到達してしまう無圧縮AVIに比べるとよっぽど扱いはよい。


このような可逆圧縮の用途として特に適しているのが、テロップなど合成に使う動画の保存ですね。

可逆圧縮ならアルファチャンネルだって保ったまま圧縮できてしまう。

こういうところでは可逆圧縮でなければ全く使えんだろう。

今回の場面はそこまで可逆圧縮でなければならないというシチュエーションでもないが、便利なのは確かだ。