動画配信基盤における帯域コスト削減とユーザー体験向上の切り札として、AV1 コーデックの採用は不可避な選択だ。特にFFmpeg 7.x系以降(2025年時点の最新安定版)では、Vulkan ベースのフィルターパイプラインと libsvtav1(Scalable Video Technology for AV1)の統合が深化し、実用的なエンコード速度と圧倒的な圧縮効率の両立が可能となった。
本稿では、FFmpeg 7.x以降の環境における SVT-AV1 の挙動を技術的に解剖し、商用レベルの配信に耐えうる「高密度かつ堅牢なエンコード設定」を提示する。
FFmpeg 7.x以降 における SVT-AV1 の実装特性
FFmpeg 7.x系の大きな進歩のひとつは、Vulkan API によるハードウェアコンテキストの取り扱いが整備された点にある。SVT-AV1 自体は CPU ベースのソフトウェアエンコーダーだが、デコードやフィルタリング処理(スケーリング、トーンマッピング)を Vulkan 経由で GPU にオフロードすることで、CPU リソースを SVT-AV1 の演算に集中させることが可能になった。
注意:
-init_hw_device vulkan=vk:0を使用する Vulkan 処理は、Vulkan 対応の GPU とドライバーが必要だ。互換性のない環境ではFailed to initialise Vulkan deviceなどのエラーが発生する。Vulkan が利用できない場合は、このオプションを省略して CPU のみのパイプラインで実行すること。
この環境では、SVT-AV1 のボトルネックは「前処理」ではなく純粋な「エンコード演算」に集約されるため、Preset と CRF の選定がリソース効率に直結する。
実戦的エンコードコマンド:Production Ready
品質と効率を最大化するためのベースラインとなるコマンドだ。単純なコピー&ペーストではなく、各フラグの意図を理解して運用してほしい。
Windows (PowerShell) 用スクリプト:
# Windows PowerShell Script for FFmpeg v8 SVT-AV1
# 実行ポリシーでスクリプトがブロックされる場合は以下を実行:
# Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
$InputFile = "input_master.mov"
$OutputFile = "output_av1.mkv"
ffmpeg -y -init_hw_device vulkan=vk:0 `
-i "$InputFile" `
-c:v libsvtav1 `
-preset 6 `
-crf 24 `
-pix_fmt yuv420p10le `
-svtav1-params "tune=0:enable-overlays=1:scd=1:scm=0:lookahead=120:keyint=240:film-grain=0" `
-c:a copy `
"$OutputFile"
macOS / Linux (Bash) 用スクリプト:
#!/bin/bash
INPUT="input_master.mov"
OUTPUT="output_av1.mkv"
ffmpeg -y -init_hw_device vulkan=vk:0 \
-i "$INPUT" \
-c:v libsvtav1 \
-preset 6 \
-crf 24 \
-pix_fmt yuv420p10le \
-svtav1-params "tune=0:enable-overlays=1:scd=1:scm=0:lookahead=120:keyint=240:film-grain=0" \
-c:a copy \
"$OUTPUT"
パラメーターの内部ロジックと最適化
単なる推奨値の羅列ではなく、SVT-AV1 の内部アルゴリズムに基づいたパラメーター選定の論理を解説する。
1. Preset:パーティショニング決定の深さ
Preset 値は、エンコーダーが「どれだけ深く探索を行うか」を決定する。具体的には、ブロックパーティショニング(画像を分割して動きを予測する処理)の細かさと、動きベクトル探索の精度が変化する。
- Preset 0–3(Research/Archival): 全探索に近い挙動。計算コストは指数関数的に増大するが、ビットレート削減効果は Preset 4 と比較して 5〜10% 程度にとどまる。商用配信では採算が合わないケースが大半。
- Preset 4–6(VOD Production): 推奨レンジ。RDO(Rate-Distortion Optimization)が十分に機能し、複雑なテクスチャの保持とエンコード速度のバランスが最適化されている。
- Preset 7–13(Real-time/Live): 高速化のために早期終了(Early Exit)の閾値が緩くなり、画質よりもスループットが優先される。
技術的トレードオフ: Preset を 6 から 4 に下げると、CPU 使用率は約 2 倍になる一方、同一 CRF 値でのファイルサイズは 5〜8% 削減される。帯域コストとコンピュートコストの損益分岐点を見極める必要がある。
2. CRF と Psycho-visual Tuning(tune=0)
AV1 の強みは、人間の視覚特性(HVS)を利用した圧縮にある。
-crf(Constant Rate Factor): x264/x265 の CRF とはスケールが異なる。SVT-AV1 の CRF30は、x265 の CRF24程度に相当する。高画質配信では20〜26の範囲がゴールデンゾーンだ。tuneパラメーター:tune=0は視覚的なシャープネスとディテール保持を優先し、SSIM/VMAF スコアとの相関性が高い。tune=1は PSNR(信号対雑音比)スコアを最大化しようとするが、数値上の正しさを優先するため視覚的な「ぼやけ」を許容する傾向がある。tune パラメーターでPSNR最適化(tune=1)またはVisual最適化(tune=0)を選択できる。
設定の結論: ユーザー体験(QoE)を指標とする場合、必ず tune=0 を指定し、数値スペックよりも「見た目の解像感」を優先すべきだ。
3. 10-bit Color Pipeline(-pix_fmt yuv420p10le)
入力ソースが 8-bit であっても、必ず 10-bit でエンコードすべきだ。
- 内部ロジック: 8-bit ソースを 8-bit で圧縮すると、量子化プロセスでの丸め誤差により、空や壁などの平坦なグラデーション部分にバンディング(縞模様)が発生する。10-bit 空間で計算することで、この量子化ノイズをディザリングなしで大幅に抑制できる。
- オーバーヘッド: SVT-AV1 のアーキテクチャは最新の SIMD 命令(AVX2/AVX-512)に最適化されており、10-bit 処理による速度低下は無視できるレベル(数% 以内)だ。
svtav1-params 詳細設定とマイクロチューニング
FFmpeg のオプション体系から溢れた、SVT-AV1 固有の制御パラメーターは -svtav1-params で直接渡す。
Lookahead とシーンチェンジ検出(scd)
lookahead=120: エンコーダーが処理中のフレームより先を「見る」フレーム数だ。これにより、ビットレート配分(Rate Control)が最適化され、複雑なシーンの直前に I フレームを配置するなどの先回りが可能になる。FPS の数倍(例: 5 秒分)確保するのが理想だ。scd=1(Scene Change Detection): シーンの切り替わりを検出し、強制的にキーフレーム(I フレーム)を挿入する。これにより、シーン転換時のブロックノイズを防ぎ、シーク性能を向上させる。scm=0(Screen Content Mode 無効): スクリーンコンテンツモードを無効にする設定だ。このモードはスクリーンキャプチャやゲーム映像向けの最適化を行うが、自然動画(実写映像)に対しては不要な処理となる。実写・映画コンテンツではscm=0を指定することで、余計なオーバーヘッドを排除できる。
Film Grain Synthesis(FGS)
AV1 の「魔法」とも言える機能だ。
film-grain=<value>: ノイズ(フィルムグレイン)を忠実にエンコードしようとすると、高周波成分として扱われ、大量のビットレートを消費する。FGS は、エンコード時にノイズを除去(デノイズ)し、そのノイズの「特徴パラメーター」だけをメタデータとして記録する。再生時にデコーダーがノイズを再合成する。- 運用: 実写映画やドラマでは
film-grain=8〜15程度を設定することで、低ビットレートでも質感のある映像が得られる。アニメーションの場合は0(無効)が基本だ。
Temporal Filtering(enable-tf)
enable-tf=0: デフォルトでは有効だが、極端な高画質を狙う場合は無効化(0)を検討する。有効にすると、時間軸方向のノイズを除去するためにフレーム間の平均化が行われるが、動きの速い細かいディテール(雨、紙吹雪など)が消失するリスクがある。ビットレートに余裕がある場合は0に設定し、ディテールを保存する。
トラブルシューティングと FAQ
エンコード速度が出ない
CPU のリソース配分と NUMA ノードを確認してほしい。SVT-AV1 はスレッド並列化に優れているが、コア数が多すぎる場合(64 コア以上など)、スレッド間の同期オーバーヘッドが発生する。FFmpeg の -threads オプション制限に加え、SVT 固有の logical_processors パラメーターでの制限、またはFFmpegインスタンスを複数立ち上げてチャンク分割エンコード(Chunked Encoding)を行う設計が有効だ。
特定のプレーヤーで再生できない
プロファイルと Tier を確認してほしい。profile=main は最も互換性が高いが、4:2:2 や 4:4:4 のクロマサブサンプリングを使用する場合は profile=professional が必要となり、ハードウェアデコーダーのサポート外になる可能性がある。コンシューマー向け配信では yuv420p10le と profile=main の組み合わせを厳守してほしい。
アニメ映像で線が滲む
tune=0 に加え、bias-pct の調整が必要だ。アニメーションなどのフラットな領域が多いコンテンツでは、心理視覚調整が強すぎると、エッジ周辺にリンギングが発生する。アニメ専用の設定として、tune=0 を維持しつつ、film-grain=0 を明示し、CRF を通常より 2〜3 下げて(品質を上げて)対応してほしい。
FFmpeg v8 と SVT-AV1 の組み合わせは、設定値一つで出力結果が劇的に変化する。上記の設定を「正解」として盲信するのではなく、これをベースライン(基準点)とし、配信するコンテンツ特性に合わせて Lookahead や Film Grain の微調整を行うことが、最も大切だ。
まとめ
SVT-AV1 エンコードの要点:
| パラメーター | 推奨値 | 理由 |
|---|---|---|
-preset | 6(VOD)/ 8–10(ライブ) | RDO と速度のバランス |
-crf | 20–26 | 高画質配信のゴールデンゾーン |
-pix_fmt | yuv420p10le | バンディング防止 |
tune | 0 | 視覚的シャープネス優先 |
lookahead | 120 | ビットレート配分の最適化 |
scd | 1 | シーン転換時の品質保護 |
film-grain | 実写: 8–15 / アニメ: 0 | コンテンツに応じて選択 |
SVT-AV1 エンコードを加速させる推奨ハードウェア構成
本記事で紹介した FFmpeg v8 の Vulkan パイプラインと SVT-AV1 のパフォーマンスを最大化するには、ボトルネックを解消する適切なハードウェア選定が不可欠だ。
1. Intel Arc A380 / A750(コスパ重視)
- 市場で最も安価に AV1 ハードウェアデコード・エンコード(QSV)環境を入手可能
- Vulkan フィルター処理のオフロード用としても十分な性能
- 対象: 自宅サーバーを安く構築したいエンジニア、省電力重視のユーザー
2. NVIDIA GeForce RTX 4060 Ti 以上(安定性重視)
- Vulkan API のドライバ品質が最も高く、FFmpeg でのトラブルが最小限
- デコードとフィルタリングを GPU 側で高速に処理し、CPU を SVT-AV1 の演算に集中させることができる
- 対象: ゲームや編集作業とエンコードを 1 台で兼任させたいハイエンドユーザー
3. AMD Ryzen 9 7950X / 9950X(エンコード特化)
- SVT-AV1 は CPU リソースをリニアに消費するため、物理コア数が重要
- 16 コア 32 スレッドの並列処理能力により、Preset 4〜5 設定でも実用的な FPS を実現
- 対象: 妥協のない最高画質を求める映像エンジニア、専用エンコードサーバー構築者