はじめに
動画配信の現場で重要な役割を果たすのが、エンコーダの設定です。AWS Elemental Liveは強力なライブエンコーディングソフトウェアで、H.264/H.265のコーデックパラメータを細かく制御できます。この記事では、主要な設定項目を一つひとつ解説していきます。
ビットレート制御モード
この設定は、エンコーダの動作モードを決める重要なパラメータです。
VBR(Variable Bitrate)
画質を一定に保ち、ビットレートが変動するモード
映画やドラマのようなハイエンドコンテンツに適します
max_bitrateを高く設定すれば高画質になりますが、ネットワーク負荷も高まります
CBR (Constant Bitrate)
転送レートを一定に保ち、画質が変動するモード
低ビットレート配信に向いています
ビットレート値(bitrate)を高くすれば高画質になりますが、上限があります
ABR (Average Bitrate)
平均転送レートを一定に維持しますが、短時間の変動は許容されるモード
VBRに比べ、ビットレート変動が抑えられます
QVBR (Quality-defined VBR)
目標画質値(quality_level)を設定し、その品質になるよう可変ビットレートでエンコード
映像の複雑さに応じて、ビットレートが動的に変わります
quality_levelにAutoを選ぶと、エンコーダが自動で品質を調整します
プロファイルとレベル
プロファイルとレベルは、エンコーダの処理能力を規定する指標です。
H.264ではBaseline、Main、Highなどから選べます
H.265ではMain/Main、Main/Highなどの組み合わせから選びます
高いプロファイルを選ぶほど、高画質で処理能力の高いエンコーディングが可能に
レベル(level)
レベルが高いほど、解像度、ビットレート、フレームレートの制限が高くなります
例えば4K解像度の場合はH.264でレベル5.2以上、H.265でレベル5.1以上が必要になります
一般的にはプロファイルHighレベル4.2程度を選ぶとよいでしょう。ただし処理負荷も高くなるので、ハードウェアに合わせて調整する必要があります。
ビットレート設定
ビットレートの設定はエンコーダの肝になる部分です。転送レートと画質のバランスを決めます。
bitrate
CBR、VBR、ABRモードで平均ビットレート(bps)を指定します
値を高くすれば高画質になりますが、ネットワーク負荷も高くなります
例えば1280x720の解像度なら3Mbps程度が目安です
max_bitrate
VBR、QVBRモードで最大ビットレートを設定します
bitrateよりも高い値を設定すると、画質の高い場面で臨機応変にビットレートアップが可能になります
min_bitrate
Statmuxモードのみ使用されます
最小ビットレートを明示的に指定したい場合に設定します
フレームレート
フレームレートはエンコーダの出力フレームレートを制御します。
framerate_numerator、framerate_denominator
出力フレームレートを分数で指定します (例: 30000/1001 = 29.97fps)
入力フレームレートと異なる場合は、フレームレートの変換が行われます
framerate _follow_source
trueを選ぶと入力フレームレートを維持します(フレームレート変換なし)
通常はfalseにして、適切なフレームレートを別途指定します
例えば、30fpsの入力映像を24fpsにする場合、framerate_numeratorに24000、framerate_denominatorに1001と指定します。フレームレート変換は処理負荷があるため、必要な場合にのみ使うのがよいでしょう。
PIXELアスペクト比
PIXELアスペクト比はエンコーダ出力の画像の形状を決めます。
par_follow_source
trueを選ぶと入力のPIXELアスペクト比を維持します
異なるアスペクト比に変換したい場合はfalseを選びます
par_numerator、par_denominator
出力PIXELアスペクト比の分数値を指定します
例えば4:3のアスペクト比なら12:11、16:9なら16:9と指定します
通常はpar_follow_sourceをtrueのままでよいでしょう。アナモルフィック変換が必要な場合のみ、par_numerator/denominatorを調整します。
インターレース・プログレッシブ設定
インターレースとプログレッシブの扱いを制御するパラメータです。
interlace_mode
プログレッシブ、インターレース、トップフィールドファースト、ボトムフィールドファーストから選びます
インターレース素材の場合はフィールドオーダーを適切に指定する必要があります
telecine
この設定は29.97fpsの場合のみ使用されます
ハードテレシネ/ソフトテレシネを指定でき、どちらかに合わせてデインタレース処理されます
例えば、1080iの59.94iインターレース素材をエンコードする場合は、interlace_modeをBottomFieldFirstに、telecineをHardに設定します。
GOP構造
GOP(Group of Pictures)構造はエンコーディングの効率と編集性のバランスを制御します。
gop_size、gop_size_units
GOPサイズ(キーフレーム間隔)をフレーム数または秒数で指定します
短いGOPサイズを選ぶと編集はしやすくなりますが、ビットレート効率が低下します
gop_num_b_frames
参照フレーム間のBフレーム数を設定します
Bフレームを多く使うほどエンコーディング効率は高まりますが、エンコーダの処理負荷も高くなります
min_i_interval
規則的I-フレームとシーン変化I-フレームの最小間隔をフレーム数で設定します
0以外を設定すると編集性が高まりますが、ビットレートが増えます
一般的な設定例としては、gop_sizeを60フレーム(2秒)、gop_num_b_framesを2、min_i_intervalを0などが考えられます。編集の要求が高ければgop_sizeを短く、ビットレート重視ならgop_num_b_framesを増やすといった調整を行います。
Qpとフィルタの設定
Qpとフィルタの設定で、エンコーディングの画質と効率を微調整します。
qp
固定QPでエンコーディングする際の量子化パラメータ値を指定します
値が小さいほど高画質になりますが、ビットレートも高くなります
max_qp、min_qp
QPの最大値/最小値の範囲を指定します
adaptive_quantization
Onにするとフレーム内でQPを空間的に変更し、画質とビットレートのバランスを最適化します
spatial_aq
Onにすると画面内の複雑さに応じてQPを変更します
フラットな領域はQPを大きく、複雑な領域はQPを小さくするといった処理が行われます
temporal_aq
Onにすると時間方向の複雑さに応じてQPを変更します
ほとんど変化がない領域ではQPを大きく、動きの激しい領域ではQPを小さくします
最も一般的な設定は、qpを26程度、adaptive_quantization、spatial_aq、temporal_aqをすべてOnにするといったパターンでしょう。コンテンツの種類に合わせて細かく調整することで、ビットレートを抑えつつ高画質化が可能になります。
その他の設定
以上が主要な設定項目の解説になります。さらにエンコーディングをきめ細かくコントロールしたい場合は、以下のようなパラメータも活用できます。
svq: エンコーダの処理品質と圧縮密度のトレードオフ値
look_ahead_rate_control: ルックアヘッドレートコントロールの程度
dynamic_sub_gop: Bフレーム数を動的に調整するかどうか
slices: 1フレーム内のスライス数 (並列処理に影響)
telecine: ソフト・ハードテレシネの適用
tiles (H.265): エンコーディングをタイルに分割して並列処理
adaptive_sao (H.265): Sample Adaptive Offsetフィルタの強度
このように、Elemental Liveにはエンコーディング条件を細かく制御できるパラメータが多数用意されています。制作の種類、配信環境、視聴環境などを総合的に勘案し、適切な設定を見つけていく必要があります。
まとめ
動画配信ではエンコーディング設定が肝になります。今回は主要なH.264/H.265パラメータについて解説してきましたが、これらをいかに組み合わせるかがポイントです。Total Coding Strategyの観点から、コンテンツに適したビットレート制御モード、GOP構造、フィルタの使い分けを検討しましょう。視聴者に最適な体験を提供できるよう、エンコーダの性能を高めていきたいものです。