# エンコード設定の指定方法

[レイアウト機能](./layout.md) で指定する JSON ファイルでは、
合成後の映像や音声をエンコードするコーデックやエンコードパラメーターを指定することができます。

エンコードコーデックやパラメーターによって、合成結果の品質やサイズ、
合成の要する時間が大きく変わる可能性があるため、
Hisui を最大限活用するためには、これらを適切に指定することが重要です。

実際に利用可能なコーデックは、Hisui のビルド方法や実行環境で変わりますが、
[`hisui list-codecs`](./command_list_codecs.md) コマンドで一覧を取得することができます。

なお [`hisui tune`](./command_tune.md) コマンドを利用することで、
適切なエンコードパラメーターをある程度自動で調整することができます。

## 音声エンコードコーデックの指定

合成後の音声のエンコードコーデックは、以下のように `audio_codec` フィールドで指定できます。

```json
{
  "audio_codec": "OPUS",
  "audio_sources": ["archive-*.json"]
}
```

`audio_codec` で指定可能な値は以下の通りです:

- `"OPUS"`: Opus音声コーデック（デフォルト）
- `"AAC"`: AAC音声コーデック

### 注意

`"AAC"` は、以下のいずれかの条件を満たしている場合にのみ指定可能です：

- macOS 用にビルドされた Hisui（Apple Audio Toolboxの AAC エンコーダーが使用されます）
- FDK-AAC を有効にしてビルドされた Hisui

公開されているビルド済みバイナリは FDK-AAC には対応していません。
FDK-AAC を利用する場合は、[ビルド方法](build.md) を参考にして、自前でのビルドを行ってください。

## 音声エンコードビットレートの指定

映像とは異なり、音声はエンコード時のパラメーターが少なく、
エンコードビットレートのみが指定可能となっています。

エンコードビットレートは、以下のように `audio_bitrate` フィールドで bps 単位で指定します。

```json
{
  "audio_codec": "OPUS",
  "audio_bitrate": 65536,
  "audio_sources": ["archive-*.json"]
}
```

`audio_bitrate` のデフォルト値は 65536 です。

## 映像エンコードコーデックの指定

合成後の映像のエンコードコーデックは、レイアウト JSON の `video_codec` フィールドで指定できます。

```json
{
  "video_codec": "VP8",
  "video_layout": {
    "main": {
      "video_sources": ["archive-*.json"]
    }
  }
}
```

`video_codec` で指定可能な値は以下の通りです：

- `"VP8"`: VP8 映像コーデック
- `"VP9"`: VP9 映像コーデック（デフォルト）
- `"H264"`: H.264 映像コーデック
- `"H265"`: H.265 映像コーデック
- `"AV1"`: AV1 映像コーデック

### 注意

`"H264"` は、以下のいずれかの条件を満たしている場合にのみ指定可能です：

- **macOS 用にビルドされた Hisui**: Apple Video Toolbox の H.264 エンコーダーが使用されます
- **OpenH264 オプション指定時**: [`hisui compose`](command_compose.md) などのコマンドで `--openh264` オプションや `HISUI_OPENH264_PATH` 環境変数が指定された場合
- **nvcodec 対応時**: nvcodec に対応してビルドされた Hisui では NVIDIA Video Codec SDK の H.264 エンコーダーが使用されます

`"H265"` は、以下のいずれかの条件を満たしている場合にのみ指定可能です：

- **macOS 用にビルドされた Hisui**: Apple Video Toolbox の H.265 エンコーダーが使用されます
- **nvcodec 対応時**: nvcodec に対応してビルドされた Hisui では NVIDIA Video Codec SDK の H.265 エンコーダーが使用されます

`"AV1"` は、以下のいずれかの条件を満たしている場合にのみ指定可能です：

- **SVT-AV1 対応時**: SVT-AV1 に対応してビルドされた Hisui では SVT-AV1 エンコーダーが使用されます
- **nvcodec 対応時**: nvcodec に対応してビルドされた Hisui では NVIDIA Video Codec SDK の AV1 エンコーダーが使用されます

なお自前で Hisui のビルドを行う場合には、nvcodec はデフォルトでは無効になっています。
有効にする方法は [ビルド方法](build.md) をご参照ください。
ubuntu-24.04_x86_64 向けのビルド済みバイナリでは nvcodec が有効になっています（CUDA がない環境では実行時に無効になります）。

## 映像エンコードビットレートの指定

映像エンコードビットレートは、レイアウト JSON の `video_bitrate` フィールドで bps 単位で指定できます。

```json
{
  "video_codec": "VP8",
  "video_bitrate": 1048576,
  "video_layout": {
    "main": {
      "video_sources": ["archive-*.json"]
    }
  }
}
```

`video_bitrate` のデフォルト値は `映像ソースの数 * 200 * 1024` です。

### 注意

[レガシー版の Hisui](./migrate_hisui_legacy.md) との互換性維持のため、`bitrate` フィールド（kbps単位）も利用可能ですが、両方が指定された場合には `video_bitrate` が優先されます。

## 映像エンコーダー固有のパラメーターセットの指定

Hisui は映像のエンコーダーとして、以下をサポートしています:

- **libvpx**: VP8 / VP9 用のエンコーダー
- **OpenH264**: H.264 用のエンコーダー
- **SVT-AV1**: AV1 用のエンコーダー
- **Apple Video Toolbox**: macOS で利用可能な H.264 / H.265 用のエンコーダー
- **NVIDIA Video Codec SDK**: CUDA対応GPU で利用可能な H.264 / H.265 / AV1 用のハードウェアエンコーダー

映像エンコーダーの種類とエンコードコーデックの組み合わせによって、指定可能なパラメーターセットは変わります。

例えば `libvpx` エンコーダーで `VP8` コーデックでエンコードを行う場合のパラメーターセットは、
以下のように、`libvpx_vp8_encode_params` をキーとした JSON オブジェクトを使って指定します:

```json
{
  "video_codec": "VP8",
  "libvpx_vp8_encode_params": {
    "cpu_used": 4,
    "min_quantizer": 4,
    "max_quantizer": 56
  }
}
```

エンコーダー固有パラメーターセット用のキーの一覧は以下の通りです：

- `libvpx_vp8_encode_params`: libvpx で VP8 エンコードを行う際のパラメーターセット
- `libvpx_vp9_encode_params`: libvpx で VP9 エンコードを行う際のパラメーターセット
- `openh264_encode_params`: OpenH264 で H.264 エンコードを行う際のパラメーターセット
- `svt_av1_encode_params`: SVT-AV1 で AV1 エンコードを行う際のパラメーターセット
- `video_toolbox_h264_encode_params`: Apple Video Toolbox で H.264 エンコードを行う際のパラメーターセット
- `video_toolbox_h265_encode_params`: Apple Video Toolbox で H.265 エンコードを行う際のパラメーターセット
- `nvcodec_h264_encode_params`: NVIDIA Video Codec SDK で H.264 エンコードを行う際のパラメーターセット
- `nvcodec_h265_encode_params`: NVIDIA Video Codec SDK で H.265 エンコードを行う際のパラメーターセット
- `nvcodec_av1_encode_params`: NVIDIA Video Codec SDK で AV1 エンコードを行う際のパラメーターセット

以降では、それぞれの詳細を説明します。

なお、デフォルトで使用されるエンコードパラメーターは [layout-examples/compose-default.jsonc](../layout-examples/compose-default.jsonc) にも記載されています。

### `libvpx_vp8_encode_params` で指定可能なパラメーターセット

`libvpx` で VP8 エンコードを行う際に指定可能なパラメーターは以下の通りです。

なお、本ドキュメントでの各パラメーターについての説明などは参考程度のものとなっております。
正確な情報については、本家のドキュメントやソースコードを参照してください。

### 基本的なエンコーダーパラメーター

- `min_quantizer` (整数値): 最小量子化パラメーター値
  - デフォルト値: 26
  - 指定可能な範囲: 0 〜 63

- `max_quantizer` (整数値): 最大量子化パラメーター値
  - デフォルト値: 40
  - 指定可能な範囲: 0 〜 63

- `cq_level` (整数値): 固定品質エンコード時の品質レベル
  - デフォルト値: 5
  - 指定可能な範囲: 0 〜 63

- `cpu_used` (整数値): エンコード速度と品質のバランス調整
  - デフォルト値: 1
  - 指定可能な範囲: 0 〜 16
  - 値が大きいほど高速だが品質が低下

### エンコード制御パラメーター

- `deadline` (文字列): エンコード期限設定
  - デフォルト値: `"realtime"`
  - 指定可能な値: `"best"`, `"good"`, `"realtime"`

- `rate_control` (文字列): レート制御モード
  - デフォルト値: `"cbr"`
  - 指定可能な値: `"vbr"`, `"cbr"`, `"cq"`

- `lag_in_frames` (整数値): 先読みフレーム数
  - デフォルト値: 6
  - 指定可能な範囲: 1 〜 25

- `threads` (整数値): エンコードに使用するスレッド数
  - デフォルト値: 1
  - 指定可能な範囲: 1 〜 システムに依存

- `error_resilient` (真偽値): エラー耐性モードの有効化
  - デフォルト値: `false`

- `keyframe_interval` (整数値): キーフレーム間隔
  - デフォルト値: 300
  - 指定可能な範囲: 1 以上の値

### VP8 固有のパラメーター

- `noise_sensitivity` (整数値): ノイズ感度設定
  - デフォルト値: 0
  - 指定可能な範囲: 0 〜 6

- `static_threshold` (整数値): 静的領域検出閾値
  - デフォルト値: 957
  - 指定可能な範囲: 0 以上の値

- `token_partitions` (整数値): トークン分割数
  - デフォルト値: 0
  - 指定可能な範囲: 0 〜 3

- `max_intra_bitrate_pct` (整数値): イントラフレームの最大ビットレート（%）
  - デフォルト値: 6668
  - 指定可能な範囲: 0 以上の値

- `arnr_config` (オブジェクト): Altref Noise Reduction 設定
  - `max_frames` (整数値): 最大フレーム数
    - デフォルト値: 1（必須項目）
    - 指定可能な範囲: 0 以上の値
  - `strength` (整数値): フィルター強度
    - デフォルト値: 4（必須項目）
    - 指定可能な範囲: 0 以上の値
  - `filter_type` (整数値): フィルタータイプ
    - デフォルト値: 2（必須項目）
    - 指定可能な値: 正の整数値

### `libvpx_vp9_encode_params` で指定可能なパラメーターセット

`libvpx_vp9_encode_params` で指定可能なパラメーターセットは以下の通りです。

なお、本ドキュメントでの各パラメーターについての説明などは参考程度のものとなっております。
正確な情報については、本家のドキュメントやソースコードを参照してください。

## 基本的なエンコーダーパラメーター

- `min_quantizer` (整数値): 最小量子化パラメーター値
  - デフォルト値: 15
  - 指定可能な範囲: 0 〜 63

- `max_quantizer` (整数値): 最大量子化パラメーター値
  - デフォルト値: 43
  - 指定可能な範囲: 0 〜 63

- `cq_level` (整数値): 固定品質エンコード時の品質レベル
  - デフォルト値: 33
  - 指定可能な範囲: 0 〜 63

- `cpu_used` (整数値): エンコード速度と品質のバランス調整
  - デフォルト値: 9
  - 指定可能な範囲: 0 〜 9
  - 値が大きいほど高速だが品質が低下

## エンコード制御パラメーター

- `deadline` (文字列): エンコード期限設定
  - デフォルト値: `"realtime"`
  - 指定可能な値: `"best"`, `"good"`, `"realtime"`

- `rate_control` (文字列): レート制御モード
  - デフォルト値: `"cq"`
  - 指定可能な値: `"vbr"`, `"cbr"`, `"cq"`

- `lag_in_frames` (整数値): 先読みフレーム数
  - デフォルト値: 16
  - 指定可能な範囲: 1 〜 25

- `threads` (整数値): エンコードに使用するスレッド数
  - デフォルト値: 1
  - 指定可能な範囲: 1 〜 システムに依存

- `error_resilient` (真偽値): エラー耐性モードの有効化
  - デフォルト値: `false`

- `keyframe_interval` (整数値): キーフレーム間隔
  - デフォルト値: 300
  - 指定可能な範囲: 1 以上の値

## VP9 固有のパラメーター

- `aq_mode` (整数値): 適応量子化モード
  - デフォルト値: 3
  - 指定可能な範囲: 0 〜 3

- `noise_sensitivity` (整数値): ノイズ感度設定
  - デフォルト値: 2
  - 指定可能な範囲: 0 〜 6

- `tile_columns` (整数値): タイル分割の列数（log2値）
  - デフォルト値: 5
  - 指定可能な範囲: 0 〜 6

- `tile_rows` (整数値): タイル分割の行数（log2値）
  - デフォルト値: 1
  - 指定可能な範囲: 0 〜 2

- `row_mt` (真偽値): 行単位マルチスレッドの有効化
  - デフォルト値: `false`

- `frame_parallel_decoding` (真偽値): フレーム並列デコーディングの有効化
  - デフォルト値: `false`

- `tune_content` (文字列): コンテンツタイプ最適化設定
  - デフォルト値: `"default"`
  - 指定可能な値: `"default"`, `"screen"`

### `openh264_encode_params` で指定可能なパラメーターセット

`openh264` で H.264 エンコードを行う際に指定可能なパラメーターは以下の通りです。

なお、本ドキュメントでの各パラメーターについての説明などは参考程度のものとなっております。
正確な情報については、本家のドキュメントやソースコードを参照してください。

#### 基本的なエンコーダーパラメーター

- `thread_count` (整数値): エンコードに使用するスレッド数
  - デフォルト値: 1
  - 指定可能な範囲: 1 〜 16

- `intra_period` (整数値): Intraフレーム間隔
  - デフォルト値: 300
  - 指定可能な範囲: 1 〜 1000

#### 品質制御パラメーター

- `max_qp` (整数値): 最大量子化パラメーター値
  - デフォルト値: 39
  - 指定可能な範囲: 1 〜 51

- `min_qp` (整数値): 最小量子化パラメーター値
  - デフォルト値: 19
  - 指定可能な範囲: 1 〜 51

- `complexity_mode` (文字列): エンコード複雑度モード
  - デフォルト値: `"low"`
  - 指定可能な値: `"low"`, `"medium"`, `"high"`

#### エンコード制御パラメーター

- `entropy_coding` (真偽値): エントロピー符号化の有効化（CABAC/CAVLC選択）
  - デフォルト値: `false`
  - `false`: CAVLC（高速）、`true`: CABAC（高効率）

- `ref_frame_count` (整数値): 参照フレーム数
  - デフォルト値: なし（省略可能）
  - 指定可能な範囲: 1 〜 16

- `spatial_layers` (整数値): 空間レイヤー数
  - デフォルト値: なし（省略可能）
  - 指定可能な範囲: 1 〜 4

- `temporal_layers` (整数値): 時間レイヤー数
  - デフォルト値: なし（省略可能）
  - 指定可能な範囲: 1 〜 4

#### レート制御パラメーター

- `rate_control_mode` (文字列): レート制御モード
  - デフォルト値: `"timestamp"`
  - 指定可能な値:
    - `"off"`: レート制御無効（最高速）
    - `"quality"`: 品質優先モード
    - `"bitrate"`: ビットレート優先モード
    - `"timestamp"`: タイムスタンプ基準モード

#### 前処理機能パラメーター

- `denoise` (真偽値): ノイズ除去の有効化
  - デフォルト値: `false`

- `background_detection` (真偽値): 背景検出の有効化
  - デフォルト値: `true`

- `adaptive_quantization` (真偽値): 適応量子化の有効化
  - デフォルト値: `false`

- `scene_change_detection` (真偽値): シーンチェンジ検出の有効化
  - デフォルト値: `false`

- `deblocking_filter` (真偽値): デブロッキングフィルターの有効化
  - デフォルト値: `false`

- `long_term_reference` (真偽値): 長期参照フレームの有効化
  - デフォルト値: `false`

#### スライスモード設定

- `slice_mode` (オブジェクト): スライス分割方法の設定
  - `type` (文字列): スライスモードのタイプ（必須）
    - デフォルト値: `"single"`
    - 指定可能な値:
      - `"single"`: 単一スライス（最高速）
      - `"fixed_count"`: 固定スライス数
      - `"size_constrained"`: サイズ制限スライス
  - `count` (整数値): `"fixed_count"` モード時のスライス数
    - 指定可能な範囲: 1 〜 16
  - `size` (整数値): `"size_constrained"` モード時の最大サイズ（バイト単位）
    - 指定可能な範囲: 1 〜 1000000

## `svt_av1_encode_params` で指定可能なパラメーターセット

`SVT-AV1` で AV1 エンコードを行う際に指定可能なパラメーターは以下の通りです。

なお、本ドキュメントでの各パラメーターについての説明などは参考程度のものとなっております。
正確な情報については、本家のドキュメントやソースコードを参照してください。

### 品質・速度制御パラメーター

- `enc_mode` (整数値): エンコード速度と品質のバランス調整
  - デフォルト値: 13
  - 指定可能な範囲: 0 〜 13
  - 値が小さいほど高品質だが低速、値が大きいほど高速だが品質が低下

- `qp` (整数値): 量子化パラメーター値
  - デフォルト値: 46
  - 指定可能な範囲: 0 〜 63

- `min_qp_allowed` (整数値): 最小量子化パラメーター値
  - デフォルト値: 12
  - 指定可能な範囲: 1 〜 20

- `max_qp_allowed` (整数値): 最大量子化パラメーター値
  - デフォルト値: 50
  - 指定可能な範囲: 35 〜 63

### レート制御パラメーター

- `rate_control_mode` (文字列): レート制御モード
  - デフォルト値: `"vbr"`
  - 指定可能な値: `"vbr"`, `"cbr"`

- `over_shoot_pct` (整数値): ビットレート超過許可率（%）
  - デフォルト値: 51
  - 指定可能な範囲: 0 〜 100

- `under_shoot_pct` (整数値): ビットレート不足許可率（%）
  - デフォルト値: 75
  - 指定可能な範囲: 0 〜 100

### GOP・フレーム構造パラメーター

- `intra_period_length` (整数値): イントラフレーム間隔
  - デフォルト値: 300
  - 指定可能な範囲: -1 〜 1000
  - -1 を指定するとイントラフレームが最初のフレームのみになります

- `hierarchical_levels` (整数値): 階層レベル数
  - デフォルト値: 3
  - 指定可能な範囲: 2 〜 5

- `pred_structure` (整数値): 予測構造
  - デフォルト値: なし（省略可能）
  - 指定可能な値: 1, 2

- `scene_change_detection` (真偽値): シーンチェンジ検出の有効化
  - デフォルト値: `false`

- `look_ahead_distance` (整数値): 先読みフレーム数
  - デフォルト値: 13
  - 指定可能な範囲: 0 〜 120

### 並列処理パラメーター

- `pin_threads` (整数値): スレッドピニング設定
  - デフォルト値: 1
  - 指定可能な範囲: 0 〜 128

- `tile_columns` (整数値): タイル分割の列数
  - デフォルト値: なし（省略可能）
  - 指定可能な範囲: 1 〜 6

- `tile_rows` (整数値): タイル分割の行数
  - デフォルト値: なし（省略可能）
  - 指定可能な範囲: 1 〜 6

- `target_socket` (整数値): ターゲットソケット設定
  - デフォルト値: なし（省略可能）
  - 指定可能な範囲: -1 〜 1

### フィルタリングパラメーター

- `enable_dlf_flag` (真偽値): デブロッキングループフィルターの有効化
  - デフォルト値: `false`

- `cdef_level` (整数値): CDEF（Constrained Directional Enhancement Filter）レベル
  - デフォルト値: -1
  - 指定可能な範囲: -1 〜 4

- `enable_restoration_filtering` (真偽値): 復元フィルタリングの有効化
  - デフォルト値: `false`

### 高度な設定パラメーター

- `enable_tf` (真偽値): Temporal Filtering の有効化
  - デフォルト値: `true`

- `enable_overlays` (真偽値): オーバーレイの有効化
  - デフォルト値: `false`

- `film_grain_denoise_strength` (整数値): フィルムグレインノイズ除去強度
  - デフォルト値: 0
  - 指定可能な範囲: 0 〜 50

- `enable_tpl_la` (真偽値): TPL Look Ahead の有効化
  - デフォルト値: `false`

- `force_key_frames` (真偽値): キーフレーム強制挿入の有効化
  - デフォルト値: `false`

- `stat_report` (真偽値): 統計レポート出力の有効化
  - デフォルト値: `false`

- `recon_enabled` (真偽値): 再構成フレーム出力の有効化
  - デフォルト値: なし（省略可能）

### エンコーダー固有設定パラメーター

- `tier` (整数値): エンコーダーティア設定
  - デフォルト値: 1
  - 指定可能な範囲: 0 〜 1

- `fast_decode` (真偽値): 高速デコードモードの有効化
  - デフォルト値: `false`

## `video_toolbox_h264_encode_params` で指定可能なパラメーターセット

`Apple Video Toolbox` で H.264 エンコードを行う際に指定可能なパラメーターは以下の通りです。

なお、本ドキュメントでの各パラメーターについての説明などは参考程度のものとなっております。
正確な情報については、本家のドキュメントを参照してください。

### 基本的なエンコーダーパラメーター

- `max_key_frame_interval` (整数値): キーフレーム間隔の最大値（フレーム数）
  - デフォルト値: 300
  - 指定可能な範囲: 1 〜 600

### 速度と品質のバランス設定

- `prioritize_speed_over_quality` (真偽値): 品質よりも速度を優先するモード
  - デフォルト値: `true`

- `real_time` (真偽値): リアルタイムエンコードモード
  - デフォルト値: `false`

- `maximize_power_efficiency` (真偽値): 電力効率最大化モード
  - デフォルト値: `false`

### フレーム構造設定

- `allow_frame_reordering` (真偽値): フレーム再順序付けの許可
  - デフォルト値: `false`

- `allow_temporal_compression` (真偽値): 時間圧縮の許可
  - デフォルト値: `true`

### プロファイル・レベル設定

- `profile_level` (文字列): H.264プロファイル・レベル
  - デフォルト値: `"baseline"`
  - 指定可能な値: `"baseline"`, `"main"`, `"high"`

- `h264_entropy_mode` (文字列): H.264エントロピー符号化モード
  - デフォルト値: `"cavlc"`
  - 指定可能な値: `"cavlc"`, `"cabac"`

### 並列処理・遅延制御設定

- `max_frame_delay_count` (整数値): 最大フレーム遅延数
  - デフォルト値: 2
  - 指定可能な範囲: 1 〜 16

- `use_parallelization` (真偽値): 並列処理の使用
  - デフォルト値: `false`

## `video_toolbox_h265_encode_params` で指定可能なパラメーターセット

`Apple Video Toolbox` で H.265 エンコードを行う際に指定可能なパラメーターは以下の通りです。

H.265 エンコーダーは H.264 と多くの共通点がありますが、いくつかの相違点があります。

なお、本ドキュメントでの各パラメーターについての説明などは参考程度のものとなっております。
正確な情報については、本家のドキュメントを参照してください。

### 基本的なエンコーダーパラメーター

- `max_key_frame_interval` (整数値): キーフレーム間隔の最大値（フレーム数）
  - デフォルト値: 300
  - 指定可能な範囲: 1 〜 600

### 速度と品質のバランス設定

- `real_time` (真偽値): リアルタイムエンコードモード
  - デフォルト値: `false`

- `maximize_power_efficiency` (真偽値): 電力効率最大化モード
  - デフォルト値: `false`

### フレーム構造設定

- `allow_frame_reordering` (真偽値): フレーム再順序付   けの許可
  - デフォルト値: `false`

- `allow_temporal_compression` (真偽値): 時間圧縮の許可
  - デフォルト値: `true`

- `allow_open_gop` (真偽値): Open GOP の許可
  - デフォルト値: `true`
  - H.265 では H.264 と異なり、この設定が利用可能です

### プロファイル・レベル設定

- `profile_level` (文字列): H.265プロファイル・レベル
  - デフォルト値: `"main"`
  - 指定可能な値: `"main"`, `"main10"`

### 並列処理・遅延制御設定

- `max_frame_delay_count` (整数値): 最大フレーム遅延数
  - デフォルト値: 15
  - 指定可能な範囲: 1 〜 16

- `use_parallelization` (真偽値): 並列処理の使用
  - デフォルト値: `true`

## NVIDIA Video Codec SDK エンコーダーパラメーター

NVIDIA Video Codec SDK（nvcodec）は、CUDA対応GPUを利用したハードウェア加速エンコーダーです。
H.264、H.265、AV1の各コーデックに対応しており、高い処理性能を提供します。

### 利用条件

nvcodecエンコーダーを利用するには、以下の条件を満たしている必要があります：

- CUDA対応のNVIDIA GPU
- 適切なNVIDIA GPUドライバー
- nvcodecに対応してビルドされたHisui
  - ubuntu-24.04_x86_64 向けのビルド済みバイナリは nvcodec が有効になっています（CUDA がない環境では実行時に無効になります）

### 共通パラメーター

nvcodecエンコーダーでは、H.264、H.265、AV1の全てのコーデックで共通して利用できるパラメーターがあります。

#### エンコード品質・速度制御パラメーター

- `preset` (文字列): エンコードプリセット
  - デフォルト値: `"p4"`
  - 指定可能な値: `"p1"`, `"p2"`, `"p3"`, `"p4"`, `"p5"`, `"p6"`, `"p7"`
  - `"p1"`: 最高品質（最低速）、`"p7"`: 最高速（最低品質）

- `tuning_info` (文字列): チューニング情報
  - デフォルト値: `"low_latency"`
  - 指定可能な値:
    - `"high_quality"`: 高品質優先
    - `"low_latency"`: 低遅延優先
    - `"ultra_low_latency"`: 超低遅延優先
    - `"lossless"`: 無劣化圧縮

#### レート制御パラメーター

- `rate_control_mode` (文字列): レート制御モード
  - デフォルト値: `"vbr"`
  - 指定可能な値:
    - `"const_qp"`: 固定量子化パラメーター
    - `"vbr"`: 可変ビットレート
    - `"cbr"`: 固定ビットレート

#### GOP・フレーム構造パラメーター

- `gop_length` (整数値): GOPの長さ（フレーム数）
  - デフォルト値: `300`
  - 指定可能な範囲: 整数値

- `idr_period` (整数値): IDR フレームの周期（フレーム数）
  - デフォルト値: なし（省略可能）
  - 指定可能な範囲: 整数値
  - 省略時は gop_length と同じ値が使用されます

#### デバイス制御パラメーター

- `device_id` (整数値): 使用するCUDAデバイスのID
  - デフォルト値: `0`
  - 指定可能な範囲: 0以上の値（システムの利用可能GPU数による）

### `nvcodec_h264_encode_params` で指定可能なパラメーターセット

NVIDIA Video Codec SDK で H.264 エンコードを行う際に指定可能なパラメーターは、上記の共通パラメーターに加えて、以下のH.264固有のパラメーターがあります。

#### H.264固有パラメーター

- `profile` (文字列): H.264プロファイル
  - デフォルト値: `"main"`
  - 指定可能な値:
    - `"baseline"`: Baseline Profile
    - `"main"`: Main Profile
    - `"high"`: High Profile
    - `"high_10"`: High 10 Profile
    - `"high_422"`: High 4:2:2 Profile
    - `"high_444"`: High 4:4:4 Profile

### `nvcodec_h265_encode_params` で指定可能なパラメーターセット

NVIDIA Video Codec SDK で H.265 エンコードを行う際に指定可能なパラメーターは、上記の共通パラメーターに加えて、以下のH.265固有のパラメーターがあります。

#### H.265固有パラメーター

- `profile` (文字列): H.265プロファイル
  - デフォルト値: `"main"`
  - 指定可能な値:
    - `"main"`: Main Profile
    - `"main10"`: Main 10 Profile
    - `"frext"`: Format Range Extensions Profile

### `nvcodec_av1_encode_params` で指定可能なパラメーターセット

NVIDIA Video Codec SDK で AV1 エンコードを行う際に指定可能なパラメーターは、上記の共通パラメーターに加えて、以下のAV1固有のパラメーターがあります。

#### AV1固有パラメーター

- `profile` (文字列): AV1プロファイル
  - デフォルト値: `"main"`
  - 指定可能な値: `"main"`（現在はMainプロファイルのみサポート）
