ffmpeg 8.0以降から外部ライブラリで使えるエンコーダ。デコーダは8.0から外部ライブラリ不要で使える。FFmpegのProres HQプロファイルよりもCVVDPスコア当たりでサイズ小さく、エンコード速度は速く、デコード負荷はProresと同程度になりHDR10のメタデータにも対応している。OpenAPVはOpen Advanced Professional Video Codecの略語。
特徴
- 最大8K解像度まで対応
- APVコーデックの422-10、422-12、444-10、444-10、4444-12、400-10プロファイルに完全準拠。4444がアルファチャンネル
- ARM NEONおよびx86(64bit)SEE/AVX CPUの最適化による少ない複雑さ
- タイルベースのマルチスレッディング
- HDR10/10+やユーザー定義フォーマットを含む様々なメタデータ
- 一定のQP(CQP)および平均ビットレート(ABR)制御アルゴリズム
- エンコーダの典型的なターゲットビットレート設定のためのAPVファミリー構成
関連記事
- GitHub – AcademySoftwareFoundation/openapv: OpenAPV · GitHub
- OpenAPV Encoding | ORI Encoding Guidelines
- Academy Software Foundationがオープンソースのビデオコーデック「OpenAPV」をホストプロジェクトに採用! サムスン電子がASWFのプレミアメンバーに : cgworld.jp
仕様書
- RFC 9924 – Advanced Professional Video
- openapv/readme/apv_isobmff.md at main · AcademySoftwareFoundation/openapv · GitHub
- draft-lim-rtp-apv – RTP payload format for APV
基本コマンド
品質指定とプリセットを既定値で明示指定する。
ffmpeg -i input -c:v liboapv -qp 32 -preset 2 output.mov
処理速度とサイズでバランスよく設定する。SD解像度だと-qp 18位がよいかも。8ビット素材なら遅くても可逆圧縮のffv1のほうがサイズが小さくなることもある。
ffmpeg -i input -c:v liboapv -qp 22 -preset 0 output.mov
ビットレート指定する。-b:vはアラートが出るので-oapv-params形式の指定もできる。こちらは単位のkが省略される。映像に対してビットレートが高すぎるとその値に届かないこともある。
ffmpeg -i input -c:v liboapv -b:v 50M -preset 0 output.mov
ffmpeg -i input -c:v liboapv -oapv-params bitrate=50000 -preset 0 output.mov
プロファイルを変更してビット深度やピクセルフォーマットを指定する。既定値の422-10以外は明示的に指定しないと変更できない。映像のビット深度やピクセルフォーマットが出力と異なると自動設定されないのでformatフィルタであらかじめ変換する。
ffmpeg -i input -vf format=yuv422p12le -c:v liboapv -qp 22 -preset 0 -oapv-params profile=422-12 output.mov
アルファチャンネルを使うときは4:4:4サブサンプリングになる。
ffmpeg -f lavfi -i testsrc=d=1,format=yuva444p10le -c:v liboapv -qp 32 -preset 2 -oapv-params profile=4444-10 output.mov
ffmpeg -i input -vf format=yuva444p10le -c:v liboapv -qp 32 -preset 2 -oapv-params profile=4444-10 output.mov
公式ドキュメント:FFmpeg Codecs Documentation : liboapv
オプション
- preset[int]
- 0, fastest:mediumより少しサイズが大きく、ビットレート当たりの品質が少し悪く、処理速度が速い
- 1, fast:fastestとほとんど変わらない
- 2, medium, default:既定値
- 3, slow
- 4, placebo:ものすごく処理速度が遅い
- qp[int]
指定できる値は12ビット深度でも同じ。32から20半ばまでCVVDPスコアが大きく改善し、20前半で上昇幅が小さくなる。1下がるほどにサイズは5-10%程度増える
既定値:32
範囲:0から63 - oapv-params[dictionary]
oapv_app_encの設定を指定できるが、指定できるのは少ない
profile一覧
- 422-10: YCbCr422 10bit:既定値
- 422-12; YCbCr422 12bit
- 444-10: YCbCr444 10bit
- 444-12; YCbCr444 12bit
- 4444-10: YCbCr4444(アルファ) 10bit
- 4444-12; YCbCr4444(アルファ) 12bit
- 400-10: YCbCr400 (モノクロ) 10bit
oapv_app_enc
oapv_app_enc --help
標準入力に対応していないので無圧縮のy4mファイルを用意する。
ffmpeg -f lavfi -i testsrc2=d=10,format=yuv422p10le -strict -1 test.y4m
oapv_app_enc -i test.y4m -w 320 -h 240 -d 10 -z 25 --input-csp 2 -o output.apv