FFmpeg ile AMD Radeon Donanım Hızlandırması Kullanarak Videoyu H.264'e Transcode Etme

Bu komutlar AMD Radeon VAAPI donanım hızlandırması kullanarak videoyu H.264’e transcode eder. Radeon RX 7800 XT ile test edildi. Çoğu modern Radeon kartı H.264 donanımsal encode’u destekler; AV1’den farklı olarak RDNA3 ile sınırlı değildir.

Hız optimize komut

Kalite ve hız dengesi iyi olan hızlı H.264 encode istediğinde bunu kullan:

transcode_h264_speed.sh
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.mp4

input.mp4 ve output-h264.mp4‘ü kendi dosya adlarınla değiştir. Varsayılan render cihazı /dev/dri/renderD128; hangi cihazın Radeon kartına ait olduğundan emin değilsen bak: How to Identify Which /dev/dri/renderD Device Is Your AMD Radeon GPU.

Flag’ler ne yapar

  • LIBVA_DRIVER_NAME=radeonsi Radeon VAAPI sürücüsünü zorlar. Her dağıtımda gerekli olmayabilir ama birden fazla GPU sürücüsü kuruluysa yardımcı olur.
  • -hwaccel vaapi donanım hızlandırmalı decode’u etkinleştirir.
  • -hwaccel_device /dev/dri/renderD128 FFmpeg’i varsayılan DRM render node’una yönlendirir.
  • -hwaccel_output_format vaapi decode edilmiş frame’leri video belleğinde tutar; böylece encoder onları doğrudan okuyabilir.
  • -c:v h264_vaapi H.264 VAAPI encoder’ını seçer.
  • -rc_mode CQP sabit-quantizer (CQP) hız kontrolü kullanır.
  • -global_quality:v 24 encoder kalitesini ayarlar. Düşük = daha yüksek kalite ve büyük dosya; yüksek = daha küçük ve düşük kalite.
  • -c:a copy audio stream’ini yeniden encode etmeden kopyalar.

Wrapper script

Bunu transcode-h264-radeon.sh olarak kaydet ve giriş dosyasıyla çalıştır; girişin yanına otomatik olarak <basename>-h264.mp4 yazar:

transcode-h264-radeon.sh
#!/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"

Örnek:

example_usage_h264.sh
chmod +x transcode-h264-radeon.sh
./transcode-h264-radeon.sh input.mp4
# Produces input-h264.mp4

Farklı bir render node kullanmak için export et:

example_render_device_h264.sh
RENDER_DEVICE=/dev/dri/renderD129 ./transcode-h264-radeon.sh input.mp4

Kalite / bitrate rehberi

h264_vaapi için global_quality değeri kabaca H.264 CRF ölçeğine (0–51) eşdeğerdir. Bunlar yaklaşık eşleştirmelerdir; her zaman kendi kaynağınla test et:

Target qualityCPU CRF (0–51)h264_vaapi global_quality (0–51)Typical 720pTypical 1080pTypical 4KTypical 8K
High quality / near-transparent1818~4 – 6 Mbps~8 – 12 Mbps~40 – 60 Mbps~120 – 180 Mbps
Standard quality (recommended)2323~2 – 4 Mbps~4 – 8 Mbps~20 – 30 Mbps~60 – 90 Mbps
Moderate compression2828~1.5 – 3 Mbps~3 – 5 Mbps~12 – 20 Mbps~35 – 60 Mbps
Below standard quality3535~0.8 – 1.5 Mbps~1.5 – 3 Mbps~6 – 12 Mbps~18 – 35 Mbps
High compression / archival low4040~0.4 – 0.8 Mbps~0.8 – 1.5 Mbps~3 – 6 Mbps~9 – 18 Mbps

Yukarıdaki komut varsayılan başlangıç noktası olarak 24 kullanır — tablodaki standart kalite (önerilen) ayarı. Gözlerine ve teslimat gereksinimlerine göre ayarla.

H.264 donanım encode’unun mevcut olduğunu doğrulama

vainfo‘nun ilgili kısmını kontrol et:

vainfo_h264_output.txt
      VAProfileH264ConstrainedBaseline:	VAEntrypointVLD
      VAProfileH264ConstrainedBaseline:	VAEntrypointEncSlice
      VAProfileH264Main               :	VAEntrypointVLD
      VAProfileH264Main               :	VAEntrypointEncSlice
      VAProfileH264High               :	VAEntrypointVLD
      VAProfileH264High               :	VAEntrypointEncSlice

Bu makinede vainfo AMD sürücüsünü şöyle raporlar:

vainfo_h264_driver.txt
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)

Bu bilgisayarda doğrulama

Kısa bir 1920×1080 test clip’i üzerinde komutu çalıştırmak şu encode özetini üretti:

transcode_h264_output.txt
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

Çıktı üzerinde ffprobe, h264_vaapi ile doğru üretilmiş codec_name=h264 ve profile=High doğruladı.

Bu bilgisayarda /dev/dri/renderD128 entegre Intel GPU’suna ait olduğundan Radeon kart aslında /dev/dri/renderD129. Her zaman vainfo‘nun Radeon kartın olarak rapor ettiği cihazı kullan.

Bunun yerine Intel GPU kullanma

Aynı h264_vaapi codec’i iHD sürücüsüyle Intel VAAPI’de de çalışır. Ortam değişkenini değiştir ve doğru render node’u seç:

transcode_h264_intel.sh
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

Donanımın için doğru cihazı bulmak üzere render-node identification post kullan.

İlgili yazılar


Check out similar posts by category: Video Linux