VP8
Verethragnaの映像圧縮コーデックについて。
さて、VP8についてお話することになりました。
VP8とは2008年にOn2 Technologies社が開発してたんですけど、2012年にGoogleに買収されて途中からGoogleの開発になった映像圧縮コーデックです。自分はVP6の頃から利用はしてたんですけど、なかなか目標のパフォーマンスまでは届かず、VP8でよーやく利用できそうかなと思ってたら途中でGoogleになりまして不安にもなりましたけど特許周りをGoogleがクリアにしたので結果的に凄く良かったです。
で、随分と年月が経ちましてVP9を経て今はAV1ですかね。
VerethragnaはVP8を採用しております。理由はソフトウェアによるエンコードの速度です。VP9も登場間もなく試してみたのですがハードウェア支援がないとVP8よりもエンコードが遅いんですよね。AV1も同様で。CPUもしくはGPUによるハードウェア支援ありきのコーデックの時代になってますのでしょうがないのですが、VerethragnaはAIの強化学習用に開発したためGPUに負担をかけないコンセプトとなっておりますので、ソフトウェアによるエンコードが高速なVP8が最適なんです。
ちなみに対抗として有名なH.264がありまして今はH.265(HEVC)もありますが、こちらも登場間もなく試してますが、VP8より遅かったんですよね。もちろん間もなくハードウェア支援に対応しまして世の中への絶大な普及範囲はご存じの通りです。ただ正直なところMPEG系は特許周りで色々と下調べやら準備やらが大変なんで避けたいです。例えばH.264でクリアになってるのはCisco SystemsのOpenH264しかないんじゃないかと推測ですけどもしちごてたらコメントください。
基本的に新しいコーデックは画質と圧縮率に重きを置いてると思いますのであんまり速度がしかもソフトウェアでエンコードにもなると尚更に進展はないのもしょーがないと思いますど。
こうして長らくVP8と共に歩むことになっておりまして、CPUの進化によりエンコードもどんどん速くなっていきまして、今となっては最新のCPUであれば申し分ない速度まで到達したかと思います。1920x1080で60fpsくらいはクリアできてますし。
あとVerethragnaはTCPのみでの通信ですので、UDPのようにパケットずれやパケットロスがないので比較的に通信設計もラクで、異常がない以上はキーフレームを送信しておらず、ずっと差分フレームのままですので通信量も抑えることができているというメリットがあります。まー、世代の古いVP8ですので他と比べるとサイズが大きくあまり送信したくないといった理由もあるのですが。
ま、映像圧縮も音声圧縮と同じで通信インフラが進むことにより圧縮の必要性がどんどん薄くなり必要なくなるものと考えております。MP3てのもありましたねそーいえばということに早々になりそうですよね。今はAACですけどPCMでも1.4Mbpsくらいですから遅かれ早かれ音声圧縮は非圧縮のPCMになるんでしょうね。ちなみにVerethragnaはCELTです、これまた小さくて速いので。脱線しましたけど。
あと余談ですけどVP8のキーフレームがWebPという画像フォーマットとして2010年に登場したにも関わらず最近になって次世代画像フォーマットとして呼ばれてるのはちょっと面白いですよね。また脱線しましたけど。
てことでBrynhildrの頃からのVP8ですので愛着も沸きまくりでこれからも何とかご一緒していきたいVP8なんですけど1つだけ不満が。
それは、VP8がYUV420の色空間しか対応していないってことです。Windowsの画面はRGBですので、RGBからYUV420に変換してからVP8でエンコードする流れです。YUV420に変換した時点で劣化しちゃいます。1ドットの線だと色がにじんだりしちゃいます。これは頂けません。
ちなみにVP9やAV1やH.264やH.265だとYUV444が(一部で制限はありつつも)利用できるのでほぼ劣化させないことが可能です。
VP8もYUV444に対応できてればVerethragnaもほぼ劣化なしの高画質でいけるのに・・・。悔しい・・・。ヘッダーファイルのVPX_IMG_FMT_I444て何なんだよ・・・。
と、何年も何年もずーーーーっと思ってたんですが。
なんとー、試行錯誤を繰り返してVP8をいじくり倒してドッタンバッタンしたところ、何とか勘とかYUV444でエンコードできるよーになりました。いや厳密にはYUV444っぽいんですけどYUV444でもなくてですね、大昔に作ったYUVとRGBのハイブリッドの映像圧縮コーデックのGaeBolgVideoCodec(GBVC)に近くてですね、YUV444を超える画質なんで「超YUV444」ってとこですかね。まあCPU負荷とデータサイズがそれぞれ2倍くらいになるデメリットは生まれてしまったんですが超高画質なのでこれも許すとします。これも将来的にインフラが吸収してもらえることを祈りつつ。
てことで、次回のVerethragnaのバージョンアップにて従来のYUV420だけでなく、画質においては他の全てを圧倒して追随を許さないであろう超高画質「YUV444(実質的には超YUV444)」が追加されますとゆーお知らせでしたー。