CUDA GPU beschleunigtes h264/h265/HEVC Video Encoding mit FFMPEG

High Quality FFMPEG Video Encoding

„High Quality“ ist nicht immer einfach zu definieren. Ich würde hohe Qualität als subjektiv gleiche oder nahezu gleiche Qualität wie das Original definieren, und das ist das Ziel.
Das Kommandozeilentool FFMPEG bietet große Flexibilität bei der Video- und Audio-Encoding mit einem großen Vorteil: Es ist kostenlos.

Voraussetzungen für High Quality – High Efficiency Video Encoding

  • Source Movie File: DNxHD 4:2:2 10-bit oder ProResHQ / Cineform mit minimaler video bitrate 185mbit movie in HD Auflösung oder besser
  • ffmpeg Commandline Video Encoder  
  • NVidia GPU mindestens Kepler Generation wie zB. GTX 6xx/7xx oder besser mit minimum Treiber Version v390.77 (or neuer).

Qualität

Die Verwendung der voreingestellten Option liefert eine Qualität, die Adobe Media Encoder übertrifft, insbesondere das Colorbanding- und Macroblock-Artefakte werden mit ffmpeg erheblich reduziert, wenn der h264-Codec mit der Option -crf verwendet wird.

 

Nach langer Zeit des Zusammensuchens, Recherchierens und viele Videoproduktionen später ist mein neues Buch über FFMPEG endlich fertig!

bestes FFMPeg Secrets eBook book Patrick Zadrobilek video encoding cuda nvidia

  „FFMPEG SECRETS“  


von Patrick Zadrobilek

HOL DIR JETZT DAS EBOOK IM NTOWN WEBSHOP!

 

Speed

Mit ffmpeg und einer anständigen GPU (wie einer Quadro P4000) bekommt der h265/HEVC-Encoder von FFMPEG einen Geschwindigkeitsschub mit bis zu 90 fps beim Codieren von HD-Filmen mit den folgenden Parameterwerten und 200 fps bei Verwendung des GPU-beschleunigten h264-Encoders.

Diese Geschwindigkeit wird erreicht, wenn man - preset slow verwendet – so absurd es klingen möge. Auch die GTX 780 Ti encoded immer noch mit 50–60 fps in FullHD mit dem h264-Hardware-GPU-Encoder mit hohe Qualitätseinstellungen – derzeit wäre eine Grafikkarte mit gutem Geschwindigkeits-/Kostenfaktor eine GTX 1070 oder GTX 1080.

Encoding High Quality h264 Video nur mit CPU:

ffmpeg.exe -i inmovie.mov -c:v libx264 -pix_fmt yuv420p -preset slow -tune film -crf 19 -c:a aac -b:a 224k outmovie.mp4

 

Parameter
-preset slow preset für HQ encoding (siehe x264 preset profiles weiter unten)
-tune film preset für film Inhalte (siehe x264 tune profiles weiter unten)
-crf 16 constant quality factor (weniger ist besser – gute Werte für HD sind 14-19)
-a aac AAC audio codec ist am gebräuchlichsten für MP4 movie files

HINWEIS: Verwenden Sie -crf, wenn die Bitrate nicht so wichtig ist und der Qualitätsfaktor wichtiger ist. Wählen Sie -b:v, wenn Sie eine Begrenzung für die Bitrate und Größe des Videos benötigen.

Encoding High Quality h264 Video via GPU:

ffmpeg.exe -hwaccel cuvid -i inmovie.mov -c:v h264_nvenc -pix_fmt yuv420p -preset slow -rc vbr_hq -b:v 6M -maxrate:v 10M -c:a aac -b:a 224k outmovie.mp4

 

Parameters
-hwaccel cuvid nutzt NVidia CUDA GPU Beschleunigung für Decoding
-c:v h264_nvenc nutzt NVidia h264 GPU Encoder
-pix_fmt yuv420p 4:2:0 color subsampling
-preset slow HQ GPU encoding
-rc vbr_hq nutzt RC option um Variables Bitrate encoding für die GPU zu ermöglichen
-qmin:v 19 -qmax:v 14 legt minimale und maximale Quantisierungswerte fest(optional)
-b:v 6M -maxrate:v 10M legt die durchschnittliche (Ziel) und maximale Bitrate fest, die für den Encoder zulässig ist
 

HINWEIS: Es gibt viel mehr Optionen für die Codierung/Decodierung der GPU-Hardware. Mit den oben genannten Optionen wird die GPU für DECODING und ENCODING verwendet – dies sind die zuverlässigsten GPU-Encoding-Optionen. Auf diese Weise ist es möglich, die Frames beispielsweise mit der Option -vf zu verarbeiten.

Encoding High Quality h265/HEVC 10-bit Video via GPU:

ffmpeg.exe -hwaccel cuvid -i inmovie.mov -pix_fmt p010le -c:v hevc_nvenc -preset slow -rc vbr_hq -b:v 6M -maxrate:v 10M -c:a aac -b:a 240k outmovie.mp4

 

Parameter
-hwaccel cuvid nutzt NVidia CUDA GPU Beschleunigung für decoding
-pix_fmt p010le YUV 4:2:0 10-bit
-c:v hevc_nvenc nutzt HEVC/h265 GPU hardware encoder
-preset slow HQ gpu encoding
-rc vbr_hq nutzt RC option um Variables Bitrate encoding für die GPU zu ermöglichen
-qmin:v 19 -qmax:v 14 legt minimale und maximale Quantisierungswerte fest(optional)
-b:v 6M -maxrate:v 10M legt die durchschnittliche (Ziel) und maximale Bitrate fest, die für den Encoder zulässig ist
 

ffmpeg-Buch E-Book-Kodierung Video h264 hevc NVIDIA-GPU-Tipps Tricks   INFO:   Fortgeschrittenere und detailliertere Parameter für GPU-beschleunigtes FFMPEG-Encoding wie diese, mit vielen weiteren Beispielen und fertigen Windwos bat-Skript Beispiel-Dateien finden Sie in meinem Buch   FFMPEG SECRETS   .

 

HINWEIS: HEVC 10-Bit hat eine sehr gute Qualität beim Abspielen mit einem aktuellen Mediaplayer wie Media Player Classic – HomeCinema   (unterstützt 10-Bit-Wiedergabe auf unterstützten Grafikkarten wie Quadro P4000 und unterstützten Displays wie HP Dreamcolor), aber da YouTube und Vimeo noch keine 10-Bit-Unterstützung haben, sehen die h264 8-Bit-Video dort besser aus als wenn man 10-bit Videos hochlädt (das könnte sich jedoch im Laufe der Zeit ändern, denn auch diese Video-Platformen passen sich langsam an neuere Technologien an).

FFMPEG -preset slow Parameter:

cabac=1 / ref=5 / deblock=1:0:0 / analyse=0x3:0x113 / me=umh / subme=8 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=-2 / threads=3 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=3 / b_pyramid=2 / b_adapt=2 / b_bias=0 / direct=3 / weightb=1 / open_gop=0 / weightp=2 / keyint=250 / keyint_min=25 / scenecut=40 / intra_refresh=0 / rc_lookahead=50 / rc=crf / mbtree=1 / crf=23.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / aq=1:1.00

 

@