これらのコマンドは AMD Radeon VAAPI ハードウェアアクセラレーションを使って動画を H.264 にトランスコードする。Radeon RX 7800 XT でテスト済み。ほとんどのモダン Radeon カードは H.264 ハードウェアエンコードをサポート——AV1 と異なり RDNA3 に限定されない。
速度最適化コマンド
品質と速度のバランスが良い高速 H.264 エンコードが欲しい場合に使用:
LIBVA_DRIVER_NAME=radeonsi ffmpeg -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format vaapi -i input.mp4 -c:v h264_vaapi -rc_mode CQP -global_quality:v 24 -c:a copy output-h264.mp4input.mp4 と output-h264.mp4 を自分のファイル名に置き換える。デフォルトのレンダーデバイスは /dev/dri/renderD128。どのデバイスが自分の Radeon カードかわからない場合は How to Identify Which /dev/dri/renderD Device Is Your AMD Radeon GPU を参照。
フラグの意味
LIBVA_DRIVER_NAME=radeonsiは Radeon VAAPI ドライバを強制。すべてのディストリビューションで必要とは限らないが、複数の GPU ドライバがインストールされている場合に役立つ。-hwaccel vaapiはハードウェアアクセラレートデコードを有効化。-hwaccel_device /dev/dri/renderD128はデフォルト DRM レンダーノードを FFmpeg に指示。-hwaccel_output_format vaapiはデコード済みフレームをビデオメモリに保持し、エンコーダが直接読めるようにする。-c:v h264_vaapiは H.264 VAAPI エンコーダを選択。-rc_mode CQPは固定量子化器(CQP)レート制御を使用。-global_quality:v 24はエンコーダ品質を設定。低いほど高品質で大きなファイル、高いほど小さく低品質。-c:a copyは音声ストリームを再エンコードせずにコピー。
ラッパースクリプト
これを transcode-h264-radeon.sh として保存し、入力ファイルで実行。入力の隣に <basename>-h264.mp4 を自動的に書き込む:
#!/bin/bash
set -euo pipefail
RENDER_DEVICE="${RENDER_DEVICE:-/dev/dri/renderD128}"
if [ $# -ne 1 ]; then
echo "Usage: $0 <input video>" >&2
exit 1
fi
input="$1"
base="${input%.*}"
output="${base}-h264.mp4"
LIBVA_DRIVER_NAME=radeonsi ffmpeg \
-hwaccel vaapi -hwaccel_device "$RENDER_DEVICE" -hwaccel_output_format vaapi \
-i "$input" \
-c:v h264_vaapi -rc_mode CQP -global_quality:v 24 \
-c:a copy \
"$output"例:
chmod +x transcode-h264-radeon.sh
./transcode-h264-radeon.sh input.mp4
# Produces input-h264.mp4別のレンダーノードを使うにはエクスポート:
RENDER_DEVICE=/dev/dri/renderD129 ./transcode-h264-radeon.sh input.mp4品質/ビットレートガイダンス
h264_vaapi の global_quality 値は H.264 CRF スケール(0–51)とほぼ同等。これらは概算マッピング。必ず自分のソースでテスト:
| Target quality | CPU CRF (0–51) | h264_vaapi global_quality (0–51) | Typical 720p | Typical 1080p | Typical 4K | Typical 8K |
|---|---|---|---|---|---|---|
| High quality / near-transparent | 18 | 18 | ~4 – 6 Mbps | ~8 – 12 Mbps | ~40 – 60 Mbps | ~120 – 180 Mbps |
| Standard quality (recommended) | 23 | 23 | ~2 – 4 Mbps | ~4 – 8 Mbps | ~20 – 30 Mbps | ~60 – 90 Mbps |
| Moderate compression | 28 | 28 | ~1.5 – 3 Mbps | ~3 – 5 Mbps | ~12 – 20 Mbps | ~35 – 60 Mbps |
| Below standard quality | 35 | 35 | ~0.8 – 1.5 Mbps | ~1.5 – 3 Mbps | ~6 – 12 Mbps | ~18 – 35 Mbps |
| High compression / archival low | 40 | 40 | ~0.4 – 0.8 Mbps | ~0.8 – 1.5 Mbps | ~3 – 6 Mbps | ~9 – 18 Mbps |
上記のコマンドは 24 をデフォルトの開始点として使用——表の標準品質(推奨)設定。目と納品要件に合わせて調整。
H.264 ハードウェアエンコードが利用可能か確認
vainfo の該当部分を確認:
VAProfileH264ConstrainedBaseline: VAEntrypointVLD
VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice
VAProfileH264Main : VAEntrypointVLD
VAProfileH264Main : VAEntrypointEncSlice
VAProfileH264High : VAEntrypointVLD
VAProfileH264High : VAEntrypointEncSliceこのマシンでは vainfo は AMD ドライバを次のように報告:
vainfo: Driver version: Mesa Gallium driver 26.0.8-1ubuntu0.3 for AMD Radeon RX 7800 XT (radeonsi, navi32, ACO, DRM 3.64, 7.0.0-31-generic)このコンピュータでの検証
短い 1920×1080 テストクリップに対してコマンドを実行した結果、次のエンコードサマリーが出力された:
Output #0, mp4, to 'testsrc_h264.mp4':
Stream #0:0: Video: h264 (High) (avc1 / 0x31637661), vaapi(tv, progressive), 1920x1080, q=2-31, 30 fps
Stream #0:1: Audio: aac (LC), 44100 Hz, mono, fltp, 69 kb/s
[out#0/mp4] video:151KiB audio:43KiB ... bitrate= 330.4kbits/s speed=8.98x出力に対する ffprobe は codec_name=h264 と profile=High を確認し、動画は h264_vaapi により正しく生成された。
この特定の PC では、/dev/dri/renderD128 が内蔵 Intel GPU に属するため、Radeon カードは実際には /dev/dri/renderD129。常に vainfo が Radeon カードとして報告するデバイスを使用すること。
代わりに Intel GPU を使用
同じ h264_vaapi コーデックは iHD ドライバで Intel VAAPI でも動作する。環境変数を置き換え、正しいレンダーノードを選択:
LIBVA_DRIVER_NAME=iHD ffmpeg -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format vaapi -i input.mp4 -c:v h264_vaapi -rc_mode CQP -global_quality:v 24 -c:a copy output-h264.mp4自分のハードウェアに適したデバイスを見つけるには render-node identification post を使用。