ffmpeg mit 2-pass Hardwarebeschleunigung

Besitzer einer NVIDIA-Grafikkarte werden sich freuen, da der neueste Treiber die Hardwarebeschleunigung von ffmpeg in Windows 10 und Linux unterstützt. Allgemeine, grundlegende Bemerkungen zur Hardwarebeschleunigung sind hier: trac.ffmpeg.org/wiki/HWAccelIntro

ffmpeg ist schnell installiert. Es gibt für Linux und Windows fertige 64bit-Pakete zum Download: ffmpeg.org.

Unter Windows braucht man nichts installieren, sondern auf C:\ einen Ordner anlegen, z. B. C:\ffmpeg und einen Pfad auf C:\ffmpeg\bin setzen. Danach steht der Befehl ffmpeg in der Eingabeaufforderung zur Verfügung.

Grundsätzlich wird alles erklärt mit dem Befehl

ffmpeg -h

Die genaue Beschreibung der Parameter und Beispiele ist hier: trac.ffmpeg.org/wiki

Nachfolgende ffmpeg-Beispiele sind mit ffmpeg N-90155-g28924f4b48 mit Windows 10 und NVIDIA GeForce GTX 1080 getestet.

ffmpeg-Version anzeigen

ffmpeg -version

Codecs anzeigen

ffmpeg -hide_banner -codecs
D..... = Decoding supported
.E.... = Encoding supported
..V... = Video codec
..A... = Audio codec
..S... = Subtitle codec
...I.. = Intra frame-only codec
....L. = Lossy compression
.....S = Lossless compression
ffmpeg -hide_banner -codecs | grep 264

Windows-Benutzer verwenden statt dem Befehl grep den Befehl findstr.

 DEV.LS h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
 (decoders: h264 h264_qsv h264_cuvid )
 (encoders: libx264 libx264rgb h264_amf
  h264_nvenc h264_qsv nvenc nvenc_h264 )
ffmpeg -hide_banner -codecs | grep 265
DEV.L. hevc H.265 / HEVC (High Efficiency Video Coding)
 (decoders: hevc hevc_qsv hevc_cuvid )
 (encoders: libx265 nvenc_hevc hevc_amf hevc_nvenc hevc_qsv )

nvenc ist NVIDIA GPU-Hardwarebeschleunigung
qsv ist Intel Quick Sync Video GPU-Hardwarebeschleunigung  (verfügbar ab Sandy Bridge Intel-CPU)

Hardwarebeschleunigungsmethoden anzeigen

ffmpeg -hide_banner -hwaccels

Ergibt die Ausgabe etwas wie

Hardware acceleration methods:
cuda
dxva2
qsv
d3d11va
qsv
cuvid

Verfügbare Presets und Encoder Options anzeigen

Für h.264-Hardware-Encoding

ffmpeg -h encoder=h264_nvenc -hide_banner

Für h.265-Hardware-Encoding

 ffmpeg -h encoder=hevc_nvenc -hide_banner

Video transcodieren zu h.264 mit NVIDIA-Hardwarebeschleunigung, 2-pass

Hardwaretranscode mit CUVID und NVENC, transcodiert ein Full-HD Video mit 225 Frames/Sekunde in bester Qualität.

ffmpeg -hwaccel cuvid -c:v h264_cuvid -i input.mkv \
       -c:v h264_nvenc -b:v 15M -profile:v high \
       -tune film -level 4.1 -preset slow -pixel_format cuda \
       -c:a copy -y -hide_banner output.mkv

Mehr Informationen zur NVIDIA Hardwaretranskodierung, unterstützte Grafikkarten und Treiber: developer.nvidia.com/nvidia-video-codec-sdk

Parameter für profile

baseline, main, high, high444p (default=main)

Parameter für tune

film, animation, grain, stillimage, psnr, ssim, fastdecode, zerolatency

Parameter für level

Bis zur Auflösung von 1920×1080 als Parameter 4.1 nehmen

Parameter für preset

  • slow
    High Quality 2-pass
  • medium
    High Quality 1-pass (default)
  • fast
    hp 1 pass
  • hp
  • hq
  • bd
  • ll
    low latency
  • llhq
    low latency hq
  • llhp
    low latency hp
  • lossless
  • losslesshp

Parameter für pixel_format

yuv420p, nv12, p010le, yuv444p, yuv444p16le, bgr0, rgb0, cuda, d3d11

Skalieren mit Hardwarebeschleunigung

Wenn ffmpeg mit --enable-libnpp kompiliert ist, kann man zur Filterkette einen GPU-Scaler hinzufügen

ffmpeg -hwaccel_device 0 -hwaccel cuvid -c:v h264_cuvid -i input.mkv\
       -vf scale_npp=-1:720 -c:v h264_nvenc -preset slow output.mkv

-hwaccel_device 0 wäre in diesem Beispiel die erste GPU.

Nur die ersten 120 Sekunden transcodieren

-t 120

Ab der 600. Sekunde beginnen

-ss 600

Oben und unten 22 Pixel abschneiden

-vf crop=in_w:in_h-2*22

Links und rechts 10 Pixel abschneiden

-vf crop=in_w-2*10:in_h

Oben und unten schwarze Balken hinzufügen

-vf pad="1920:1080:0:(1080-ih)/2"

Dieses Beispiel gilt für ein Full-HD Video mit 1920×1080 Pixel. Das Format wird benötigt für die HD-DVD Produktion (Mini-BluRay), da nur die Abmessungen 1920×1080 und 1280×720 funktionieren.

Ohne Audio

-an

Ohne Video

-vn

Siehe auch