ffmpeg 8.0以降から外部ライブラリで使えるエンコーダ。デコーダは8.0から外部ライブラリ不要で使える。FFmpegのProres HQプロファイルよりもCVVDPスコア当たりでサイズ小さく、エンコード速度は速く、デコード負荷はProresと同程度になりHDR10のメタデータにも対応している。OpenAPVはOpen Advanced Professional Video Codecの略語。

Windows向けはGyan氏のバイナリが対応している。
Builds – CODEX FFMPEG @ gyan.dev

特徴

  • 最大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ファミリー構成

関連記事

仕様書

基本コマンド

品質指定とプリセットを既定値で明示指定する。
ffmpeg -i input -c:v liboapv -qp 32 -preset 2 output.mov

処理速度とサイズでバランスよく設定する。SD解像度だと-qp 18位がよいかも。8ビット素材なら遅くても可逆圧縮のffv1のほうがサイズが小さくなることもある。
ffmpeg -i input -c:v liboapv -qp 20 -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 20 -preset 0 -oapv-params profile=422-12 output.mov

ffmpeg 8.1.2以降は対応した。
ffmpeg -f lavfi -i testsrc2=d=10,format=yuv422p12le -c:v liboapv -qp 20 -preset 0 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%程度増える。-qp 20-c:v prores_ks -profile:v hqと同程度の品質になりそう
    既定値: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

ビットストリームフィルタ

公式ドキュメントはまだない。古いmediainfoだとうまくパースできず、新しいバージョンでは対応している。

仕様書のsection 5.3.5が該当部分になる。
ffmpeg -h bsf=apv_metadata

BT709
ffmpeg -i input -c:v liboapv -qp 20 -preset 0 -bsf:v apv_metadata=color_primaries=1:transfer_characteristics=1:matrix_coefficients=1 output.mov

PQ
ffmpeg -i input -c:v liboapv -qp 20 -preset 0 -bsf:v apv_metadata=color_primaries=9:transfer_characteristics=16:matrix_coefficients=9 output.mov

HLG
ffmpeg -i input -c:v liboapv -qp 20 -preset 0 -bsf:v apv_metadata=color_primaries=9:transfer_characteristics=18:matrix_coefficients=9 output.mov

  • color_primaries[int]
    • 1:BT.709
    • 2:unspecified
    • 3:reserved
    • 4:BT.470 System M
    • 5:BT.601 PAL
    • 6:BT.601 NTSC
    • 7:SMPTE 240M
    • 8:Generic film
    • 9:BT.2020
    • 10:XYZ, smpte428, smpte428_1
    • 11:DCI P3, smpte431
    • 12:Display P3, smpte432
  • transfer_characteristics[int]
    • 1:BT.709
    • 2:unspecified
    • 4:BT.470 System M
    • 5:BT.470 System B/G
    • 6:BT.601
    • 7:SMPTE 240M
    • 8:Linear
    • 9:Logarithmic (100:1)
    • 10:Logarithmic (316.22777:1)
    • 11:xvYCC
    • 12:BT.1361
    • 13:sRGB/sYCC
    • 14:BT.2020 (10-bit)
    • 15:BT.2020 (12-bit)
    • 16:PQ
    • 17:SMPTE
    • 18:HLG
  • matrix_coefficients[int]
    • 0:gbr
    • 1:BT.709
    • 2:unspecified
    • 4:fcc
    • 5:BT.470 System B/G
    • 6:BT.601
    • 7:SMPTE 240M
    • 8:YCgCo
    • 9:BT.2020 non-constant
    • 10:BT.2020 constant
    • 11:Y’D’zD’x
    • 12:Chromaticity-derived non-constant
    • 13:Chromaticity-derived constant
    • 14:ICtCp
  • full_range_flag[int]
    • 0:tv
    • 1:pc

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)