x264 エンコード パラメーターの詳細な紹介: エンコーダー

目次

序章

エンコーダパラメータ

コードモジュール

説明

基本モジュール

コードレート制御モジュール

分析モジュール

他のモジュール

序章

x264 エンコーダーでは、さまざまなアルゴリズムとさまざまな基本的なエンコード機能が紹介されており、このフィルムでは、エンコーダーの構成パラメーターについて詳しく紹介します。

x264 エンコーダのすべてのパラメータのコレクションは、「x264 パラメータの完全なコレクション」_DogDaoDao のブログ - CSDN ブログを参照してください。

プロファイル、プリセット、チューン、その他のパラメーター セットの詳細については、 x264 エンコード パラメーターの詳細について_DogDaoDao のブログ - CSDN ブログを参照してください。

 CPU、ビデオ プロパティ、およびその他のパラメーター セットの詳細については、次を参照してください: x264 エンコード パラメーターの詳細: CPU およびビデオ プロパティ_DogDaoDao のブログ-CSDN ブログ

エンコーダパラメータ

コードモジュール

    param->i_frame_reference = 3;
    param->i_keyint_max = 250;
    param->i_keyint_min = X264_KEYINT_MIN_AUTO;
    param->i_bframe = 3;
    param->i_scenecut_threshold = 40;
    param->i_bframe_adaptive = X264_B_ADAPT_FAST;
    param->i_bframe_bias = 0;
    param->i_bframe_pyramid = X264_B_PYRAMID_NORMAL;
    param->b_interlaced = 0;
    param->b_constrained_intra = 0;

    param->b_deblocking_filter = 1;
    param->i_deblocking_filter_alphac0 = 0;
    param->i_deblocking_filter_beta = 0;

    param->b_cabac = 1;
    param->i_cabac_init_idc = 0;

    param->rc.i_rc_method = X264_RC_CRF;
    param->rc.i_bitrate = 0;
    param->rc.f_rate_tolerance = 1.0;
    param->rc.i_vbv_max_bitrate = 0;
    param->rc.i_vbv_buffer_size = 0;
    param->rc.f_vbv_buffer_init = 0.9;
    param->rc.i_qp_constant = -1;
    param->rc.f_rf_constant = 23;
    param->rc.i_qp_min = 0;
    param->rc.i_qp_max = INT_MAX;
    param->rc.i_qp_step = 4;
    param->rc.f_ip_factor = 1.4;
    param->rc.f_pb_factor = 1.3;
    param->rc.i_aq_mode = X264_AQ_VARIANCE;
    param->rc.f_aq_strength = 1.0;
    param->rc.i_lookahead = 40;

    param->rc.b_stat_write = 0;
    param->rc.psz_stat_out = "x264_2pass.log";
    param->rc.b_stat_read = 0;
    param->rc.psz_stat_in = "x264_2pass.log";
    param->rc.f_qcompress = 0.6;
    param->rc.f_qblur = 0.5;
    param->rc.f_complexity_blur = 20;
    param->rc.i_zones = 0;
    param->rc.b_mb_tree = 1;

    /* Log */
    param->pf_log = x264_log_default;
    param->p_log_private = NULL;
    param->i_log_level = X264_LOG_INFO;

    /* */
    param->analyse.intra = X264_ANALYSE_I4x4 | X264_ANALYSE_I8x8;
    param->analyse.inter = X264_ANALYSE_I4x4 | X264_ANALYSE_I8x8
                         | X264_ANALYSE_PSUB16x16 | X264_ANALYSE_BSUB16x16;
    param->analyse.i_direct_mv_pred = X264_DIRECT_PRED_SPATIAL;
    param->analyse.i_me_method = X264_ME_HEX;
    param->analyse.f_psy_rd = 1.0;
    param->analyse.b_psy = 1;
    param->analyse.f_psy_trellis = 0;
    param->analyse.i_me_range = 16;
    param->analyse.i_subpel_refine = 7;
    param->analyse.b_mixed_references = 1;
    param->analyse.b_chroma_me = 1;
    param->analyse.i_mv_range_thread = -1;
    param->analyse.i_mv_range = -1; // set from level_idc
    param->analyse.i_chroma_qp_offset = 0;
    param->analyse.b_fast_pskip = 1;
    param->analyse.b_weighted_bipred = 1;
    param->analyse.i_weighted_pred = X264_WEIGHTP_SMART;
    param->analyse.b_dct_decimate = 1;
    param->analyse.b_transform_8x8 = 1;
    param->analyse.i_trellis = 1;
    param->analyse.i_luma_deadzone[0] = 21;
    param->analyse.i_luma_deadzone[1] = 11;
    param->analyse.b_psnr = 0;
    param->analyse.b_ssim = 0;

    param->i_cqm_preset = X264_CQM_FLAT;
    memset( param->cqm_4iy, 16, sizeof( param->cqm_4iy ) );
    memset( param->cqm_4py, 16, sizeof( param->cqm_4py ) );
    memset( param->cqm_4ic, 16, sizeof( param->cqm_4ic ) );
    memset( param->cqm_4pc, 16, sizeof( param->cqm_4pc ) );
    memset( param->cqm_8iy, 16, sizeof( param->cqm_8iy ) );
    memset( param->cqm_8py, 16, sizeof( param->cqm_8py ) );
    memset( param->cqm_8ic, 16, sizeof( param->cqm_8ic ) );
    memset( param->cqm_8pc, 16, sizeof( param->cqm_8pc ) );

    param->b_repeat_headers = 1;
    param->b_annexb = 1;
    param->b_aud = 0;
    param->b_vfr_input = 1;
    param->i_nal_hrd = X264_NAL_HRD_NONE;
    param->b_tff = 1;
    param->b_pic_struct = 0;
    param->b_fake_interlaced = 0;
    param->i_frame_packing = -1;
    param->i_alternative_transfer = 2; /* undef */
    param->b_opencl = 0;
    param->i_opencl_device = 0;
    param->opencl_device_id = NULL;
    param->psz_clbin_file = NULL;
    param->i_avcintra_class = 0;
    param->i_avcintra_flavor = X264_AVCINTRA_FLAVOR_PANASONIC;

説明

基本モジュール

i_frame_reference 

/* 参照フレームの最大数 */

  • DPB (Decoded PictureBuffer) のサイズを制御します。値の範囲は 1 ~ 16 です。実際には、P フレームより何フレーム前に参照フレームとして選択できるかを設定します。
  • 1 に設定すると、目の前のフレームのみを参照します。
  • B フレームで使用できる P フレームの数は、B フレーム参照が有効かどうかに応じて 1 ~ 2 フレーム少なくなります。
  • h264 規格では、各レベルで参照できるフレームの数が制限されており、レベル 4.1 を選択した場合、1080p で使用できる最大 ref は 4、720p で使用できる最大 ref は 9 です。
  • この値はデコード速度には影響しませんが、値が大きいほどデコードに必要なメモリが多くなり、ref が大きいほど効果は高くなりますが、6 を超えると効果は明ら​​かではなく、パフォーマンスに影響します。ある程度はあるが、それほど多くはない。
  • ref=13 は、ref=4 と比較して 6% ~ 15% のボリュームを節約できます。
  • デフォルトの状態は 3 です。
  • プリセット= 超高速(1)、超高速(1)、非常に高速(1)、より高速(2)、高速(2)、中速(3)、低速(5)、低速(8)、非常に低速(16)、プラセボ(16) )
  • = アニメ(ref>1?ref*2:1)、東方(ref>1?ref*2:1)
  • ffmpegの説明
    • H.264 の最も便利な機能の 1 つは、現在のフレームの直前のフレーム以外のフレームを参照できることです。このパラメータを使用すると、使用できる参照の数を最大 16 まで指定できます。参照の数を増やすと、DPB (デコードされたピクチャ バッファ) の要件も増加します。これは、多くの場合、ハードウェア再生デバイスが使用できる参照の数に厳しい制限があることを意味します。取り持つ。実写ソースでは、参照数が 4 ~ 8 を超えると使用が制限されますが、漫画ソースでは最大値 16 までが役立つことがよくあります。参照フレームが増えると、すべてのフレームが動き検索によって検索されるため、より多くの処理能力が必要になります (早期スキップ決定が行われた場合を除く)。速度の低下は、より遅い動き推定方法を使用する場合に特に顕著です。推奨されるデフォルト: -refs 6
  • 手順
    • param->i_frame_reference = 3; //コードのバージョン
    • --ref/frameref 3 //コマンドラインのバージョン

i_keyint_max 

/* この間隔で IDR キーフレームを強制します */

  • この間隔で IDR キー フレームを強制的に挿入します。通常、これは最大の IDR フレーム間隔であり、ユーザーはさまざまなビジネス シナリオに従ってビジネス特性を満たす値を設定します。
  • デフォルトの状態は 250 です。
  • 手順
    • param ->i_keyint_max=250; //コードのバージョン
    • --keyint 30 //コマンドラインのバージョン

i_keyint_min

/* これより近くにあるシーンカットは、IDR ではなく I としてコード化されます。*/

  • 参考:基礎が弱い x264 での min-keyint パラメータの用途は何ですか? - ほぼ知っています
  • IDR フレーム間の最小間隔を設定します。keyint の範囲が小さすぎると、IDR フレームが「間違った」位置 (フラッシュ シーン、ストロボ シーンなど) に表示されます。このパラメータは、通過する必要があるフレーム数を制限します。各 IDR フレームの後、次の IDR フレームが表示されるまで。
  • デフォルトの状態は 0; X264_MIN( h ->param.i_keyint_max/10, (int)fps );
  • 手動で設定した場合は、 x264_clip3( h ->param.i_keyint_min, 1, h ->param.i_keyint_max/2+1 );
  • 通常は、デフォルト値または fps と同じ値を維持することをお勧めします。
  • 手順
    • param->i_keyint_min=X264_KEYINT_MIN_AUTO;//コードバージョン
    • --min-keyint/keyint-min 15 //コマンドラインのバージョン

i_scenecut_threshold

/* 余分な I フレームをどの程度積極的に挿入するか */

  • 追加の I フレームを積極的に挿入する方法、I フレーム、IDR フレーム (シーンチェンジ検出) を使用するための意思決定のしきい値を設定する方法。
  • x264 は各フレームと前のフレームの差を計算して値を取得します。その値が scenecut より小さければ「シーンの変化」が検出され、前のフレームからの距離が min-keyint 未満であれば Insert します。 I フレーム、そうでない場合は IDR フレームを挿入します。
  • B フレームがなければ、一般的な x264 ストリームのフレーム タイプは次のようになります: IPPPPP...PI。--bframes 2を使用すると、IBPBBPBPPPB...PI のように、最大​​ 2 つの連続する P フレームを B フレームに置き換えることができます。
  • デフォルトの状態は 40 です。
  • preset = 超高速、scenecut = 0の場合、つまり、追加の I/IDR フレームは挿入されません。
  • 手順
    • param ->i_scenecut_threshold=0;//コードバージョン
    • --scenecut 40//コマンドラインのバージョン

i_bframe

/* 2 つの参照画像間の b フレームの数 */

  • 2 つの参照ピクチャ間で利用可能な B フレームの数。
  • B フレームと P フレームの違いは、B フレームはその後のフレームを参照できること、この機能により圧縮率が大幅に向上すること、そして平均品質も -pbratio オプションによって制御されることです。
  • B フレームには 2 つのタイプがあり、1 つは他の B フレームから参照でき、もう 1 つは他の B フレームから参照できません。
  • B フレームの設定には、遅延、タイムスタンプの同期、デコードと再生の複雑さが含まれますが、一般に RTC などの特殊なシーンでは使用されません。
  • デフォルトの状態は 3 です。
  • プリセット= 超高速(0)、非常に低速(8)、プラセボ(16);
  • = アニメーション(+2)、ゼロレイテンシー(0);
  • 手順
    • param ->i_bframe=0; //コードのバージョン
    • --bframes 0 //コマンドラインのバージョン

i_bframe_adaptive

  • B フレーム決定アルゴリズムの設定は、x264 による P フレームまたは B フレームの使用に影響します。
  • 0 -- オフ、常に B フレームを使用します。1 -- 高速アルゴリズム、B フレームが多いほど速度が速くなります。2 -- 最適なアルゴリズム、B フレームが多いほど速度が遅くなります。
  • デフォルト状態 1 (X264_B_ADAPT_FAST)。
  • プリセット= 超高速(X264_B_ADAPT_NONE)、低速(X264_B_ADAPT_TRELLIS)、超低速(X264_B_ADAPT_TRELLIS)、プラセボ(X264_B_ADAPT_TRELLIS)
  • 適応型 B フレーム配置決定アルゴリズムを設定します。この設定は、x264 が P フレームを配置するか B フレームを配置するかを決定する方法を制御します。
    • 0. 無効。常に B フレームを選択してください。これは、古い no-b-adapt 設定で行われたことと同じです。 注: マルチパス エンコードの場合、このオプションはフレーム タイプが決定される最初のパスでのみ必要です。
    • 2. 「最適」アルゴリズム、低速、--b-frames 設定を高くすると速度が大幅に低下します。
    • 1. 「高速」アルゴリズム、より速く、--b-frames 設定を高くすると速度がわずかに増加します。このモードを使用する場合、基本的には常に --bframes 16 を使用する必要があります。
  • 手順
    • param->i_bframe_adaptive=X264_B_ADAPT_FAST;//コードバージョン
    • --b-adapt 1 //コマンドラインのバージョン

i_bframe_bias 

  • B フレームの使用の強度を調整します。値が大きいほど、B フレームに偏り、値の範囲は -100 ~ 100 です。100 または -100 は、すべてまたはすべての B フレームを保証するものではありません。
  • 新しいレート制御が x264 よりも優れていることが保証されていない限り、通常は推奨されません。
  • デフォルトの状態は 0 です。

i_bframe_pyramid

 /* いくつかの B フレームを参照として保持します: 0=オフ、1=厳密な階層、2=通常 */

  • B フレームを参照フレームとして許可します。
  • 0 (X264_B_PYRAMID_NONE) -- B フレームは参照フレームとして使用できません。現時点では、I フレームと P フレームのみが参照フレームとして使用できます。 1 (X264_B_PYRAMID_STRICT) -- 1 つの B フレーム参照フレームのみが許可されます。 Blu-ray エンコーディング標準に必須のピクチャ グループ、2 (X264_B_PYRAMID_NORMAL) -- B フレーム参照フレームを任意に使用します。
  • デフォルトの状態は 2 (X264_B_PYRAMID_NORMAL) です。
  • 手順
    • param->i_bframe_pyramid=X264_B_PYRAMID_NORMAL;//コードバージョン
    • --b-pyramid 2 //コマンドラインのバージョン

b_deblocking_filter

[-6、6] -6 ライトフィルター、6 強力

  • H264 標準の組み込みデブロッキング フィルターを調整することは、非常にコスト効率の高い選択であり、品質を大幅に向上させることができ、相対的なパフォーマンスの消費もそれほど大きくありません。
  • メイン スイッチ (b_deblocking_filter をオンにするのが最適です) と 2 つのサブスイッチ (i_deblocking_filter_alphac0、i_deblocking_filter_beta) がしきい値を制御します。ここで、alphac0 はデブロッキング範囲であり、デブロッキングが大きいほど、デブロッキングはより強力になり、詳細は小さくなります。一般に、デフォルト値 0 で十分であり、+-2 の範囲を超えないでください。ベータはブロック解除のしきい値であり、値が小さいほど、より多くの詳細が保持され、値が大きいほど、より多くの詳細が保持されます。デブロッキングの強さは、ブロッキング効果の除去がより効果的です。値が大きいほど、画像はより平坦になり (1:2)、画像が小さくなり、より詳細になります (-2:-1)。
  • 推奨値: 低--0:3、中--1:-1、高--0:-3、
  • デフォルトの状態はオン (0:0) です。
  • プリセット=超高速(0);
  • = fastdecode(0)、映画(-1:-1)、アニメーション(1:1)、ゲイン(-2:-2)、静止画(-3:-3)、東方(-1:-1);
  • 手順
    • param->b_deblocking_filter=1; param->i_deblocking_filter_alphac0=0;param->i_deblocking_filter_beta=0;//代版
    • --deblock 0:0 //コマンドラインのバージョン

b_cabac

  • cabac (適応型バイナリ算術符号化) を有効にします。通常、これを有効にすると、圧縮率が 5% ~ 15% になり、パフォーマンスの消費があまり大きくなりません (高量子化ではパフォーマンスの消費は比較的小さくなります)。
  • デフォルトの状態は 1 (オン) で、オンでない場合は cavlc です。
  • プリセット= 超高速(0)、チューン = ファストデコード(0)、ベースライン(0);
  • ffmpegの説明
    • CABAC は、x264 で使用されるデフォルトのエントロピー エンコーダーです。デコード側とエンコード側の両方で多少遅くなりますが、実写ソースでは圧縮が 10 ~ 15% 向上し、アニメーション ソースでは、特に低ビットレートで大幅に向上します。トレリス量子化の使用にも必要です。CABAC を無効にすると、特に高ビットレートでのデコード パフォーマンスが多少向上する可能性があります。CABAC はベースライン プロファイルでは許可されません。推奨されるデフォルト: -coder 1 (CABAC が有効)
  • 手順
    • param->b_cabac=1; //コードのバージョン
    • --cabac 1//コマンドラインのバージョン

i_cabac_init_idc

  • cabac に関連する境界パラメータを制御します。
  • デフォルトの状態は 0 で、可能な値は 0、1、2 です。
  • デフォルト値をそのままにしておきます。これはあまり役に立ちません。内部アルゴリズムの詳細を調べたい場合を除き、変更することはお勧めしません。
  • 手順
    • param->i_cabac_init_idc=0;
    • --cabac-idc 0

コードレート制御モジュール

i_rc_メソッド 

  • 主なコード レート制御方法には、X264_RC_CQP (固定量子化値)、X264_RC_CRF (固定コード レート係数)、X264_RC_ABR (平均コード レート制御) の 3 つがあります。
  • デフォルト値 X264_RC_CRF (固定コード レート係数)。
  • これは、i_bitrate、f_rf_constant、i_qp_constant の 3 つのパラメーターとともに使用する必要があります。

i_ビットレート 

  • コード レート設定。X264_RC_ABR と一緒に使用する必要があります。
  • デフォルト値は 0。

f_rf_定数 

  • CRF 設定は X264_RC_CRF (固定コード レート係数) とともに使用する必要があります。
  • デフォルト値は 23。

i_qp_定数 

  • CQP 設定。X264_RC_CQP と一緒に使用する必要があります。
  • デフォルトは -1;

f_rate_tolerance

  • このパラメータには許容値機能という 2 つの目的があり、x264 レート制御ロジックのパラメータです。
  • 2 つの意味があります: エンコードの 1 パスで、このパラメーターは、x264 が指定された平均ターゲット ビット レートから逸脱できる割合を制御します。これを inf に設定してビット レート オーバーフロー検出を完全にオフにすることができ、最低値を設定できます。 0.01 まで; 値が大きいほど、x264 がムービーの終わりの複雑なシーンをより適切に処理できるようになります (1.0 は、1% のビットレート偏差が許容されることを意味します)。
  • vbv がオンになっている場合 (vbv で始まるオプションが使用されている限りオンになります)、このオプションは vbv の強度を意味し、値が大きいほど、設定された vbv 値のより大きな変動が許可されることを意味します。測定単位を使用できます。
  • デフォルトの状態は 1.0 で、これはパーセントの意味を表します (1.0 ~ 100.0 が妥当な値の範囲である可能性があります)。
  • 手順
    • param->rc.f_rate_tolerance=1.0; //コードのバージョン
    • --ratetol 1.0//コマンドラインのバージョン

i_vbv_max_bitrate

  • 最大瞬間ビット レート。単位は kbps です。同時に vbv-bufsize の範囲を設定する必要があります。これら 2 つのパラメータを使用して、crf および ABR ビット レート制御モードの両方でビット レートを制限できます。
  • 通常は vbv-maxrate = vbv-bufsize = a*bitrate; に設定します (vbv-bufsize = 1.25*vbv-maxrate も設定します)。
    • a = 0、vbv メカニズムは有効になっておらず、エンコード パフォーマンスは最高ですが、出力ビット レートの変動が大きいため、実際のローン表示でのストリーミング メディア送信には適していません。
    • a > 1、フレームあたりのデータには制限がありますが、ストリーミング メディア送信に適した平均ビット レートを一時的に超える可能性があります。a の値は解像度 240p/360p (a=1.8) によって異なります。 、432p ~ 1080p (a = 1.5)、1080p 以上 (a = 1.25)。
    • a = 1 (CBR と等しい) は、通常、この方法を使用しません。
    • 0 < a < 1 の場合、この設定には利点がなく、無意味です。
  • デフォルトの状態は 0 です。
  • 手順
    • param->rc.i_vbv_max_bitrate=0; //コードバージョン
    • --vbv-maxrate 2000 //コマンドラインのバージョン

i_vbv_max_bufsize

  • vbv で使用可能な最大バッファを設定します (単位はキロビットです) (ビデオ バッファリング ベリファイア、ビデオ バッファリング ベリファイア)
  • vbv-maxrate と一緒に使用する必要があります。

i_vbv_buffer_init

  • 再生前に vbv バッファにロードする必要があるコード ストリームの数を設定します。値が 1 未満の場合、サイズは vbv-init*vbv-bufsize です。1 より大きい場合、キロビット単位の値になります (初期値)。充填量);
  • デフォルトの状態は 0.9 です。通常はデフォルト値の状態を維持しますが、変更することはお勧めしません。
  • 手順
    • param->rc.i_vbv_buffer_init=0.9; //コードバージョン
    • --vbv-init 0.9 //コマンドラインのバージョン

i_qp_min

/* 最小許容 QP 値 */

  • 最小量子化値。0 ~ 51 の範囲です。
  • デフォルトの状態は 0 です。
  • 手順
    • param->rc.i_qp_min=0; //コードのバージョン
    • --qpmin 0//コマンドラインのバージョン

i_qp_max

/* 最大許容 QP 値 */

  • 最大量子化値。0 ~ 51 の範囲です。
  • デフォルトの状態は INT_MAX(51) です。
  • 手順
    • param->rc.i_qp_max=0; //コードのバージョン
    • --qpmax 0//コマンドラインのバージョン

i_qp_ステップ

/* フレーム間の最大 QP ステップ */

  • 2 つのフレーム間の量子化器の最大変数値を設定します。
  • デフォルトの状態は 4 ですが、より優れたアルゴリズムがない限り、これを変更することはお勧めできません。
  • 手順
    • param->rc.i_qp_step=4; //コードのバージョン
    • --qpstep 4//コマンドラインのバージョン

f_pb_factor

  • P フレームに対する I フレームの量子化値の平均増分が大きいほど、I フレームの品質が向上します。
  • デフォルト状態では 1.4。
  • 手順
    • param->rc.f_pb_factor=1.4; //コードバージョン
    • --pbratio 1.4 //コマンドラインのバージョン

f_pb_factor

  • P フレームに対する B フレームの量子化値の平均減少分が大きいほど、B フレームの品質は大きく低下します。
  • mbtree の開始時には、この設定は効果がなく、mbtree は最適な値を自動的に計算します。
  • デフォルト状態では 1.3。
  • 手順
    • param->rc.f_pb_factor=1.3; //コードバージョン
    • --pbratio 1.3 //コマンドラインのバージョン

i_aq_mode

/* psy 適応 QP。(X264_AQ_*) */

  • 適応量子化、適応量子化モード、つまり、マクロブロック MB の複雑さに応じて各 MB マクロブロックの量子化パラメータを調整します。このパラメータはビデオの主観的な品質に大きな影響を与え、長所と短所さえ決定します。エンコーダ。
  • x264 が AQ をオンにすると (適応量子化テクノロジ。AQ がオフになると、x264 はディテールの低い滑らかな領域に低すぎるビット レートを使用する傾向があります。AQ は各マクロブロックにビット レートをより適切に割り当てることができます)、PSNR と VMAF は両方とも重大なスコア損失になります。 , ただし、SSIM はメリットを反映できます。多くの実践により、AQ は主観性と正の相関があり、この点では SSIM が主観的な感情により一致していることが示されています。
  • デフォルトの状態は 1 (X264_AQ_VARIANCE) です。
  • 0 (X264_AQ_NONE) -- AQ を無効にします。
  • 1 (X264_AQ_VARIANCE) -- AQ がビデオ全体およびフレーム内でビットレートを再分配できるようにします。
  • 2 (X264_AQ_AUTOVARIANCE) -- 自己分散 AQ (実験段階)、フレームごとに強度を調整してみます。
  • 3 (X264_AQ_AUTOVARIANCE_BIASED) -- オフセット分散適応モード; [4/5 に加えて]
  • プリセット=ultrafast(0)、チューン = psnr(0)、チューン =ssim(2)
  • 手順
    • param->rc.i_aq_mode=X264_AQ_VARIANCE;//コードバージョン
    • --aq-mode 2//コマンドラインのバージョン

i_aq_strength

  • 適応量子化強度。詳細度の低い (小さな ssd) 部分に偏ったビット レートの強度を決定します。
  • アニメ選択 0.6 ~ 1.0、実在人物選択 0.8 ~ 1.2。
  • 曲調 = アニメ(0.6)、ゲイン(0.5)、静止画(1.2)、東方(1.3)
  • デフォルトの状態は 1.0 です。0.0 ~ 2.0 以外の値は推奨されません。
  • 手順
    • param->rc.i_aq_strength=1.0;//コードバージョン
    • --aq-strength 1.0//コマンドラインのバージョン

i_先読み

  • mbtree と vbv-lookahead で使用可能なフレーム数を設定します。最大値は 250 に設定できます。MBtree 部分では、フレーム数を増やすと良い結果が得られますが、速度も遅くなります。mbtree で使用される最大バッファis MIN (rc-lookahead , keyint); vbv-lookahead 部分については、vbv を使用する場合、フレーム数を増やすと安定性と精度が向上します。vbv-lookahead で使用される最大値は次のとおりです。 MIN(rc-lookahead, MAX(--keyint, MAX(--vbv-maxrate, --bitrate) / --vbv-bufsize * --fps))
  • デフォルトの状態は 40 です。
  • プリセット= 超高速(0)、超高速(0)、超高速(10)、より高速(20)、高速(30)、低速(50)、低速(60)、非常に低速(60)、プラセボ(60);
  • チューン= ゼロレイテンシー(0);
  • 手順
    • param->rc.i_lookahead = 40;//コードバージョン
    • --rc-lookahhead 40//コマンドラインのバージョン

f_qcompress

/* 0.0 => cbr、1.0 => 定数 qp */

  • 量子化カーブ圧縮係数; mbtree と一緒に使用すると、mbtree の強度に影響します (qcomp が高い = mbtree が弱い); 値の範囲は 0.0 ~ 1.0; 0 は cbr に相当、1 は cqp に相当します。
  • デフォルトの状態は 0.6 です。
  • チューン=粒(0.8)
  • 手順
    • param ->rc.f_qcompress=0.8;//コードバージョン
    • --qcomp 0.8//コマンドラインのバージョン

f_qblur 

/* 一時的にクオンツをブラーします */

  • 量子化曲線のガウスぼかしの半径として指定された値を適用します。これは、各フレームに割り当てられた量子化期間が、隣接するフレームの量子化期間によって平均化され、量子化変動の影響が制限されることを意味します。
  • 主に QP の激しいジッターを防ぐために、rate_factor が決定される前に複雑さと qscale に対して実行されるガウス ブラーが --cplxblur と組み合わせて使用​​されます。
  • このパラメータは、RCEQ 後の qscale のガウスぼかしの filter_size を指定します (rate_factor が決定されています)、「filter_size = (int)(qblur*4) | 1」
  • デフォルトの状態は 0.5 です。
  • 手順
    • param ->rc.f_qblur=0.5;//コードバージョン
    • --qblur 0.5//コマンドラインのバージョン

f_complexity_blur

  • このパラメータは、RCEQ 前の複雑さのガウス ブラーの filter_size を示します (rate_factor は決定されません)、「filter_size=2*cplxblur+1」
  • デフォルトの状態は 20 です。
  • 手順
    • param->rc.f_complexity_blur=20; //コードのバージョン
    • --cplxblur 20//コマンドラインのバージョン

b_mb_tree

  • マクロブロック ツリーに基づくビットレート制御、フレーム間のマクロブロックの動きと相対的な重みを継続的に監視することでビデオ品質を向上、特定のパラメータ条件下では、このパラメータのビット レート節約効果は明ら​​かです。
  • このパラメータに関連するものは、rc-lookhead、qcomp;
  • デフォルトでは 1 (オン)。
  • プリセット= 超高速(0)、超高速(0);
  • = ツェルプラテンシー(0);
  • 手順
    • param->rc.b_mb_tree=1; //コードのバージョン
    • --mbtree 1//コマンドラインのバージョン

分析モジュール

イントラ/インター

/* パーティション内/パーティション間 */

  • フレーム内およびフレーム間 MB マクロブロック分割モード; 分析モジュールを符号化するときに、許容される分割モード スイッチを設定します。
  • このオプション パラメータは RD パフォーマンスに大きな影響を与えます。イントラには通常、i4x4 (X264_ANALYSE_I4x4、対応する値は 1)、i8x8 (X264_ANALYSE_I8x8、対応する値は 2)、i16x16 (最も基本的な MB サイズ、対応する値は 0) が含まれます。 ;
  • inter には、16x8、8x16、8x8、8x4、4x8、4x4 (P フレームおよび B フレームを含む) に加えて、イントラ モードが含まれます。
  • デフォルトの状態には PSUB8x8 オプションは含まれていません。
  • preset = 超高速 (0、0、つまり 16x16MB のみ、分割なし)、超高速 (2、0、すべてフレーム内、フレーム間は MB16x16 のみ、分割なし)、低速/非常に低速/プラセボ (PSUB8x8 オプションを追加) ;
  • 手順
    • param->analyse.intra=X264_ANALYSE_I4x4|X264_ANALYSE_I8x8; //コードバージョン
    • param->analyse.inter=X264_ANALYSE_I4x4|X264_ANALYSE_I8x8|X264_ANALYSE_PSUB16x16|X264_ANALYSE_BSUB16x16;//コードバージョン画像.png

i_direct_mv_pred

/* 空間対時間の mv 予測 */

  • 時空間 MV 予測。B フレームで使用される予測方法です。つまり、B フレームのダイレクト予測モードの対応するスイッチ パラメーターです。0 (X264_DIRECT_PRED_NONE)--速度と品質が低下します、1 (X264_DIRECT_PRED_SPATIAL)-- 、2 (X264_DIRECT_PRED_TEMPORAL)- -、3 (X264_DIRECT_PRED_AUTO) - 品質は向上しますが、速度は低下します。
  • プリセット=遅い(3)、遅い(3)、非常に遅い(3)、プラセボ(3)
  • デフォルトの状態は 1 (X264_DIRECT_PRED_SPATIAL) です。
  • 手順
    • param->analyse.i_direct_mv_pred=X264_DIRECT_PRED_SPATIAL; //代码版
    • --direct 1 //命令行版

i_me_method

/* motion estimation algorithm to use (X264_ME_*) */

  • 整像素运动估计算法;在x264中共有5中快速搜素算法;
  • 0(X264_ME_DIA)--diamond菱形搜索,是最简单的搜索方式,从最优预测值出发,上、下、左、右一个像素处检测运动向量MV,挑选最好值,然后重复该步骤,知道找不到最优的运动向量mv;
  • 1(X264_ME_HEX)--hexagon六边形搜索,对周围六个点进行rang-2搜索,效率大大高于dia,且速度相当,一般都用此方法;
  • 2(X264_ME_UMH)--(uneven multi-hex不对称多六角形搜索)比hex慢很多,但能搜索复杂的多六角形,以避免错过很难找到的运动向量。与hex和dia相似,merange参数直接控制umh的搜索半径,使用者可自行增减搜索的空间尺寸。
  • 3(X264_ME_ESA)--(exhaustive全面搜索) 在最优预测值附近merange范围内的整个空间内,以高度优化的智能方式搜索运动向量。相当于数学上的穷举法,搜索区域内的每一个运动向量,但是更快些。然而,此方法远远慢于UMH,且好处不多,对于普通编码没有太大用处。
  • 4(X264_ME_TESA)-- (transformed exhaustive变换全面搜索)算法尝试对各个运动向量近似哈达玛变换比较法。与exhaustive类似,但效果略好,速度略慢。
  • プリセット= 超高速(0)、超高速(0)、低速(2)、超低速(2)、プラセボ(4)
  • デフォルトの状態は 1 (X264_ME_HEX) です。
  • 手順
    • param->analyse.i_me_method=X264_ME_HEX; //コードバージョン
    • --me 1//コマンドラインのバージョン

i_me_range

/* 整数ピクセル動き推定探索範囲 (予測 mv から) */

  • 整数ピクセル動き推定検索範囲。dia および hex 検索アルゴリズムの場合、範囲は 4 ~ 16 ピクセル以内に制御されます。umh および esa の場合、16 ピクセルを超える大規模な検索を実行できます。これは、高解像度および高解像度の検索に非常に適しています。動きの速いビデオ 便利です。このパラメータを増やすと、エンコード時間も大幅に長くなります。
  • 最大動きベクトル探索範囲 [16];
  • メレンジの設定が大きすぎる (>64) と、より有用な動きベクトル mv が見つかる可能性が低くなり、圧縮率がわずかに低下する場合があります。
  • プリセット= 非常に遅い(24)、プラセボ(24);
  • デフォルトの状態は 16 です。
  • 手順
    • param->analyse.i_me_range=16; //コードのバージョン
    • --merange 16//コマンドラインのバージョン

i_subpel_refine

/* サブピクセルの動き推定の品質 */

  • サブピクセルの動き推定とモード決定。値が大きいほど優れています。1 ~ 5 は単にサブピクセルのリファインメント強度を制御し、6 は I/P フレームのモード決定 RDO をオンにし、7 は I/P フレームのモード決定 RDO をオンにします。フル フレーム クラス; 8 ~ 9 は RDO を使用して最適な MV モードを決定します; 10 は QP の RDO 検索を実行して最適な値を決定します; 11 はすべての RD を意味し、早期に終了することはできません; 2 より低い値はより高速なモードを使用しますただし、先読みモードの品質は低く、scencut の意思決定に影響を与えるため、通常は推奨されません。
  • サブピクセルの動き推定とモード決定 [7]
    • 0: フルペルのみ (非推奨)
    • 1: SAD モード決定、1 qpel 反復
    • 2: SATD モードの決定
    • 3-5: 段階的に qpel を増やします(3--MB 上の HPel から QPel、4--常に QPel、5--Multi QPel + 双方向動き推定)
    • 6: I/P フレームの RD モード決定
    • 7: 全フレームのRDモード決定
    • 8: I/P フレームの RD 改良
    • 9: すべてのフレームの RD リファインメント
    • 10: QP-RD - trellis=2、aq-mode>0 が必要
    • 11: フル RD: すべての早期終了を無効にする
  • プリセット= 超高速(0)、超高速(1)、非常に高速(2)、より高速(4)、高速(6)、低速(8)、低速(9)、非常に低速(10)、プラセボ(11);
  • デフォルトの状態は 7 です。
  • 手順
    • param->analyse.i_subpel_refine=7;// コードのバージョン
    • --subme 8 //コマンドラインのバージョン

mvrange/mv-range

/* mv の最大長 (ピクセル単位)。-1 = 自動、レベルに基づいて */

  • 動きベクトルの最大垂直範囲 (ピクセル単位)。
  • デフォルトの状態は -1 です。つまり、設定はレベルに応じて異なります。
  • レベル1/1b:64、レベル1.1-2.0:128、レベル2.1-3.0:256、レベル3.1+:512;
  • mvrange を手動で変更したい場合は、上記から 0.25 を引いてください; //?
  • デフォルト値を維持することをお勧めします。

mvrange-スレッド/mv-range-スレッド

/* スレッド間の最小スペース。-1 = 自動、スレッド数に基づいて。*/

  • スレッド間の最小モーション ベクトル バッファーは、スレッドの数に基づいてデフォルト値を維持するため、変更することはお勧めできません。
  • デフォルトの状態は -1 です。

b_mixed_references

/* 各 MB パーティションに独自の参照番号を持たせることができます */

  • 混合参照。各マクロブロック位置に独自の参照番号を持たせることができます。マクロブロック MB ではなく 8x8 ブロックに基づいて参照を選択します。multiref モードの場合、品質は向上しますが速度は低下します。
  • デフォルトの状態は 1 (オープン状態) です。
  • プリセット= 超高速(0)、超高速(0)、非常に高速(0)、より高速(0);
  • 手順
    • param->analyse.b_mixed_references=1; //コードのバージョン
    • --mixred-refs 0 //コマンドラインのバージョン

b_chroma_me

  • 通常、モーション予測はルミナンス プレーンとクロマ プレーンの両方で機能しますが、このオプションがオフの場合、わずかな速度向上と引き換えにクロマモーション予測が無効になります。
  • デフォルトの状態は 1 (オープン状態) です。
  • 手順
    • param->analyse.b_chroma_me=1; //コードバージョン
    • --chroma-me 1 //コマンドラインのバージョン

f_psy_rd/f_psy_トレリス

/* サイ RD の強さ */ /* サイ トレリスの強さ */

  • これは組み合わせパラメータであり、最初のパラメータは f_psy_rd (rd 強度パラメータ)、2 番目のパラメータは f_psy_trellis (トレリス強度パラメータ) であり、サイコビジョン用に最適化されたオプション パラメータです。
  • f_psy_rd は subme>=6 の場合にのみ有効になります。
  • trellis值越大就代表越看重优化之后的bits大小,反之亦然更注重图像的质量,但目前还在实验阶段;严格来说,psy_trellis是一种算法,而不是一种量化矩阵,只是它的行为(或者说函数名字)伪装成了量化矩阵。在正常编码阶段,数据会经过DCT变换->quant量化->zigzag扫描->编码,这几个阶段。而psy_trellis干的事情,就是把quant量化之后的数据拿出来,然后对每一个系数coef进行评估,试图找出到底是coef-1好,还是原本的 coef更优秀,然后找出一串最优的编码。所以经过psy_trellis量化的系数,它的解码过程和正常的解码一点区别也没有,因为psy_trellis并没有提供另一种更优秀的量化矩阵,所以也用不着特定的反量化矩阵了。它做的仅仅是评估一下“如果把系数coef减去1,会不会得到更优秀的结果”这件事。至于为什么要这么做,或者说为什么coef-1会比原本的coef更优秀,究其原因还是因为quant量化带来的精度损失,再加上x264采用了严格的四舍五入的整数运算策略,这就导致有时候coef-1反而对图像更友好,而且还能减少编码之后的bits。要实现这个功能,在CABAC和CAVLC下是不同的;
  • 缺省状态是1.0:0.0;
  • tune = film(1:0.15)、gain(1:0.25)、animation(0.4:0)、stilimage(2.0:0.7)、touhou(1:0.2)
  • ffmpeg解释
    • First value represents the amount that x264 biases in favor of detail retention instead of max PSNR in mode decision. Requires subme >= 6. Second value is psy-trellis, an experimental algorithm that tries to improve sharpness and detail retention at the expense of more artifacting. Recommended starting values are 0.1-0.2. Requires trellis >= 1. Recommended default: 1.0:0.0
  • 使用方法
    • param->analyse.f_psy_rd=1.0;param->analyse.f_psy_trellis=0; //代码版
    • --psy-rd 1.0:0.0 //命令行版

b_psy

 /* Toggle all psy optimizations */

  • 切换所有心理视觉优化;心理视觉优化算法,针对人眼特别优化..通过舍弃那些人眼不容易注意到的信息来提高压缩率;
  • 缺省状态是1(开启状态);
  • tune = psnr(0)、ssim(0);
  • 最好保持开启状态,能提升视频的主观视觉质量;
  • 使用方法
    • param->analyse.b_psy=1; //代码版
    • --psy 1 //命令行版

i_chroma_qp_offset

  • 设置一个用于色度编码(译者按:视频使用YUV编码,人眼对于亮度更敏感)的量化器的偏移值。可以是负值。在开启 psy-rd或 psy-trellis时 x264会自动降低色度的量化参数用于补偿亮度的量化器,意味着色度质量会被降低。它们默认会在chroma-qp-offset的基础上减2。
  • 注意:x264在量化器=29时会为亮度和色度使用同样的量化器。往后,色度都会使用比亮度还好的量化器,最后,亮度达到q=51时,色度的量化器是q=39。这个是H.264标准中要求的做法。
  • 缺省状态是 0;
  • 使用方法
    • param->analyse.i_chroma_qp_offset=0;
    • //代码版--chroma-qp-offset 0 //命令行版

b_fast_pskip

/* early SKIP detection on P-frames */

  • P帧的早期跳过决策,关闭时会带来非常大的耗时,只能换回来非常小的质量提升,最好开启状态;
  • 缺省状态是1(开启状态);
  • preset = placebo(0);
  • 使用方法
    • param->analyse.b_fast_pskip=1; //代码版
    • --fast-pskip 1 //命令行版

i_weighted_pred

/* weighting for P-frames */

  • 参考:https://www.cnblogs.com/wangnath/p/15057885.html
  • 使x264能够使用明确加权预测(explicit weighted prediction)来改善P帧的压缩。亦改善淡入/淡出的品质。模式越高越慢。
  • 在lookahead阶段计算权重系数w,所以正式编码阶段只要去用w就行了。而Weight-P主要添加的代码是在reference_build_list函数中,如果当前帧编码帧是P帧,那么在编码阶段,会调用x264_mb_analyse_init函数把wieghted-ref帧数据算出来,然后就可以进行运动预测的计算了。
  • 0(X264_WEIGHTP_NONE)--停用、1(X264_WEIGHTP_SIMPLE)--简易分析淡入淡出,但不分析重复参考帧、2(X264_WEIGHTP_SMART)--智慧分析淡入淡出和重复参考帧;
  • 在webrtc中使用该参数报错,不兼容;//目前不知道为什么原因?
  • 注意:为Adobe Flash(版本低于10.1)编码时请把此值设为0,会导致解码时出现错误。Flash 10.1时此BUG得到修正。
  • 缺省状态是 2;
  • preset = ultrafast(0)、superfast(1)、veryfast(1)、faster(1);tune = fastdecode(0);BASELINE(0);
  • 使用方法
    • param->analyse.i_weighted_pred=X264_WEIGHTP_SMART; //代码版
    • --weightp 2 //命令行版

b_weighted_bipred

/* implicit weighting for B-frames */

  • weighted prediction for B-frames;
  • h264允许给可参考B帧加上影响预测图像的权重,算法和功能类似-weightp;但只有0和1,即开启关闭状态;
  • 缺省状态1(开启);
  • preset = ultrafast(0);
  • tune = fastdecode(0);
  • 使用方法
    • param->analyse.b_weighted_bipred=1; //コードのバージョン
    • --weightb 1 //コマンドラインのバージョン

b_dct_decmate

 /* P フレームでの変換係数のしきい値処理 */

  • P フレームの DCT 変換の係数しきい値。このパラメータは、「不要」とみなされる DCT ブロックを破棄し、符号化効率を向上させますが、品質の低下は通常無視できます。
  • デフォルトの状態は 1 (オン) です。
  • チューニング= ゲイン(0);
  • 手順
    • param->analyse.b_dct_decmate=1; //コードのバージョン
    • --dct-decmate 1 //コマンドラインのバージョン

b_transform_8x8

  • 適応変換サイズ。このオプションのエンコードとデコードの速度コストは 0 に近く、これをオフにする唯一の理由は、一部のデバイスがハイ プロファイル設定と互換性がないことです。
  • ffmpegの説明
    • x264 が 8×8 と 4×4 の周波数変換サイズを選択できるようにすることで、品質が大幅に向上します。i8x8 パーティションに必要です。このオプションの速度コストは、エンコードとデコードの両方でほぼゼロです。これを無効にする唯一の理由は、ハイプロファイルと互換性のないデバイスでのサポートが必要な場合です。
  • デフォルトの状態は 1 (オン) です。
  • プリセット= 超高速(0)、ベースライン(0)、ミアン(0);
  • 手順
    • param->analyse.b_transform_8x8=0; //コードバージョン
    • --8x8dct 0 //コマンドラインのバージョン

i_トレリス

/* トレリス RD 量子化 */

  • 格子RD量子化による符号化効率の向上。
  • トレリス量子化は、DCT ベースの符号化方式におけるデータ圧縮を向上できるアルゴリズムです。これは、Xvid や x264 などの非可逆ビデオ圧縮エンコーダでの動き推定後の残差 DCT 係数を最適化するために使用されます。トレリス量子化は、一部の DCT 係数のサイズを削減し、代わりに他の係数を復元します。Trellis によって選択された係数のレート歪み比が最も低いため、このプロセスにより品質が向上します。トレリス量子化は、各ブロックの最適な量子化を効率的に見つけて、ビットレートに対する PSNR を最大化します。入力データと圧縮方法に応じて効果は異なります。
  • 0 -- 無効、1 -- 最終コード化マクロブロック MB のみ、2 -- すべてのモード選択。一般に、1 を選択すると速度と効率のバランスが良くなり、2 を選択するとさらに速度が低下し、場合によっては詳細が不明瞭になります。 ;
  • デフォルトの状態は 1 です。
  • プリセット= 超高速(0)、超高速(0)、非常に高速(0)、低速(2)、低速(2)、非常に低速(2)、プラセボ(2)
  • Cabac エントロピー コーディングを有効にするには、有効にする必要があります。
  • 手順
    • param->analyse.i_trellis=1; //コードのバージョン
    • --trellis 1 //コマンドラインのバージョン

i_luma_deadzone[0]/i_luma_deadzone[1]

/* ルミナンス量子化で使用されるデッドゾーン サイズ */

  • 輝度間/内部量子化デッドゾーン (出力が 0 になる領域を提供するデッド ゾーン) のサイズを設定します。このパラメーターの値の範囲は 0 ~ 32 です。デッドゾーンの値は、x264 が破棄することを選択する詳細の細かさを設定します。予備の代わりに。細かすぎる詳細は検出が難しく、エンコード コストが高くなります。このような詳細を破棄すると、低収益画像でのビット レートの無駄を防ぐことができます。
  • デッドゾーンとトレリスは互いに反発します。
  • デフォルトの状態は、deadzone-inter = 21、deadzone-intra = 11 です。
  • 調子=粒(6、6)
  • 手順
    • param ->analyse.i_luma_deadzone[0] =6; param ->analyse.i_luma_deadzone[1] =6; //コードバージョン
    • --deadzone-inter 6 --deadzone-intra 6 //コマンドラインのバージョン

他のモジュール

i_cqm_preset 

  • カスタム量子化マトリックスは、一般的に flat、jvt、custom を含む組み込みのプリセット値に設定されます。手動で変更する例はほとんどありません。変更は推奨されず、デフォルト値を維持するようにしてください。
  • 0(X264_CQM_FLAT)、1(X264_CQM_JVT)、2(X264_CQM_CUSTOM);
  • デフォルトの状態は 0 です。
  • profile = BASELINE(0)、MAIN(0);
  • 使用方法
    • p->i_cqm_preset=X264_CQM_FLAT; //代码版
    • --cqm 0 //命令行版

b_repeat_headers

/* put SPS/PPS before each keyframe */

  • 在每个关键帧前面都放置SPS、PPS;最好保持开启状态,这样在丢包情况下,减少错误解码情况;
  • 缺省状态是 1(开启);
  • 使用方法
    • param->b_repeat_headers=1; //代码版
    • --repeat-header 1 /--global-header 0 //命令行版

annexb

/* if set, place start codes (4 bytes) before NAL units, otherwise place size (4 bytes) before NAL units. */

  • 使能b_annexb参数:X264编码器输出的码流格式符合《T-REC-H.264-201704-I!!PDF-E》Annex B Byte stream format+《T-REC-H.264-201704-I!!PDF-E》NAL unit syntax定义格式;
  • 关闭b_annexb参数:X264编码器输出的码流格式符合 “四个字节的长度字段“+《T-REC-H.264-201704-I!!PDF-E》NAL unit syntax定义格式;
  • 两种数据格式的差别主要是在NAL前面这三个或者四个字节的含义上。annexb模式下,b_long_startcode下是4个字节的起始码,short startcode下是3个字节的起始码;当该NAL是NAL_SPS、NAL_PPS或者第一个Slicehead情况下,b_long_startcode为1。非annexb模式下,起始4个字节为该NAL的长度。播放器只能播放annexb格式的裸流。
  • X264 エンコーダがこれら 2 つの形式を備えている理由は、主に MP4 ファイル形式と連携するためです。MP4 ファイルは多数の BOX で構成されており、各 BOX の構造は、BOX 名 + 長さ + ペイロードです。長さビットがペイロード情報に配置されていない場合、Mp4 ファイルのカプセル化はより複雑になります。
  • デフォルトの状態は 1 (オン) です。

画像.png

強制CFR

/* VFR 入力。1 の場合、レート制御の目的でタイムベースとタイムスタンプを使用します。0 の場合、fps のみを使用します。*/

  • に設定する と、タイムベースとタイムスタンプがレート制御処理に使用され、フレーム間の距離が計算されます。
  • 0に設定する と、コード レートは fps に従ってのみ制御され、フレーム間の距離が計算されます。
  • エンコーダのレート制御には、時間基準と 現在のフレームのタイムスタンプという2 つの重要なパラメータがあります。なぜこれら 2 つが必要なのでしょうか? エンコーダのコード レート制御は 1000kbps などの時間単位に基づいているため、これは 1 秒に 1000k ビットのデータがあることを意味し、エンコーダには時間の概念はなく、時間参照とタイムスタンプのみが存在します。これら 2 つの組み合わせにより時間が計算されるため、エンコーダのコード レート制御はこれら 2 つのパラメータに基づいて計算されます。
  • タイムベース: 多くのエンコーダは 1/fps に設定されていますが、フレーム pts をミリ秒単位で直接渡す必要がある場合があります。この場合、タイムベースは 1/1000 に設定する必要があり、ts でデコードされる場合は、 /mp4 形式 出力ビデオフレームのタイムベースは 1/90000 なので、エンコード時に 1/90000 に設定されます。
  • タイムスタンプ: 時間基準が 1/fps の場合、タイムスタンプは毎回 1 ずつインクリメントされるため、エンコードされたフレームの後、タイムスタンプはコンテナーで必要な標準 (flv、rtmp、mp4、ts、等。)。
  • b_vfr_input は、エンコーダがフレーム間の継続時間を計算し、前後のフレームのタイムスタンプを直接減算するように、フレーム レート入力を変更することを意味します。コードを参照してください。 h->lookahead->next.list[i]->i_duration = 2 * (h->lookahead->next.list[i+1]->i_pts - h->lookhead->next.list[i] ]->i_pts);
  • b_vfr_input がオフの場合、タイムベースを 1/fps に設定する必要があります。そうしないと、フレーム期間を計算できません。コード h->lookahead->next.list[i]->i_duration = delta_tfi_divisor[h->lookahead->next.list[i]->i_pic_struct] を参照してください; delta_tfi_divisor は配列、プリセット、特定のタイプのフレームです。期間は時間基準単位の数です。
  • デフォルトの状態は 1 (オン) です。
  • チューン= ゼロレイテンシー(0);
  • 手順
    • param->b_vfr_input=1; //コードのバージョン
    • --force-cfr 1 //コマンドラインのバージョン

おすすめ

転載: blog.csdn.net/yanceyxin/article/details/131749954