yumetodoの旅とプログラミングとかの記録

旅や登山の記録やプログラミング関連の話とかフリーソフト紹介とか

Ut Video Codec SuiteのUtVideo T2 (UMxx) ファミリとffmpeg

可逆圧縮コーデックとしておなじみのUt Video Codec Suite、しばらく情報収集をサボってたらだいぶ変わってて驚いた。

predict gradient

まずこれまでもあったULxx系のコーデックのフレーム内予測方式にこれまでのleft(速度優先)とmean(圧縮率優先)のほかに、gradientという、leftより速くてmeanほどではないがleftより圧縮率が高い方式が加わっていた。

或るプログラマの一生 » [UtVideo] バージョン 18.0.0

こんなことならもっと早く実装すべきだったし、もっというと Predict Left 要らなかった。

そういうわけでleftはオワコンになった。

で、これへのffmpegの対応はというと、

github.com

github.com

が該当する。

UtVideo T2 (UMxx) ファミリ

SIMDにやさしい、AVX2とかAVX-512とかにやさしい処理を、例えばハフマン符号化ではない圧縮であったりをして(ソースコード読んでないのであれ)くれるコーデックが19.0.1(2017/12/30)で追加されました。

或るプログラマの一生 » [UtVideo] UtVideo T2 (UMxx) ファミリの詳細

とりあえず朗報としてインターレースは死にました。どうせ誰も使ってなかったし[要出典]いいよね。

YUV420には対応していません。

YUV420 を正しく扱うには人生は短すぎます。

とのこと。

気になる速度と圧縮率はというと、公開されているベンチマークのグラフを見る限りでは

  • 圧縮率では predict mean > predict gradient > T2 > predict left
  • エンコード速度では T2 >> predict gradient > predict mean >= predict left
  • デコード速度では T2 >> predict gradient >= predict left > predict mean

となり、

  • すでに死んでたけどpredict leftいらない子
  • predict gradientも利点を見いだせない(どっち付かず)

という印象。

で、これへのffmpegの対応はというと、

github.com

[FFmpeg-devel] avcodec/utvideodec: add support for UMH2, UMY2, UMH4, UMY4, UMRA, UMRG - Patchwork

2017/12/30となんと同日に最初のpatchが作成されていて(わずか4時間後!!)、つまり正式リリース前からutvideoの公式repoの差分を追いかけているffmepgのcontributerがいたということ!?(patchwork ffmpegの方の日付がいまいちそうなると理解できないんだけど)

まだffmpegの実装の方はSIMD化されていないけれど、対応速い。

公式の初期実装がでたのが

github.com

2017/11/15のことだから、そっから作り始めたとしても1ヶ月かかってない。@BMahol氏恐ろしや。

関連commit

github.com

github.com

github.com