Übergeben Sie für CRF-basierte Codierungen die folgenden Argumente im folgenden Codeausschnitt an FFmpeg:
-c:v h264_nvenc -rc:v vbr_hq -cq:v 19 -b:v 2500k -maxrate:v 5000k -profile:v high
Natürlich müssen Sie die Zielbitraten und einen festen cq
Wert anpassen . 19 ist die empfohlene Einstellung, da sie visuell mit 0 identisch ist und dennoch einen guten Komprimierungskomfort in Bezug auf die Dateigröße bietet. In diesem Artikel erfahren Sie mehr über die Funktionsweise von CNI.
Es ist zu beachten, dass die -cq
Skala logarithmisch ist, was bedeutet, dass 0 im Wesentlichen verlustfrei ist und 51 das absolut schlechteste wäre.
Die Qualität kann durch Hinzufügen von Optionen wie B-Frames weiter verbessert werden (beschränken Sie diese auf höchstens 3, und dies erfordert das H.264-Hauptprofil und höher. Basisprofile unterstützen keine B-Frames. Übergeben Sie dazu -bf {uint}
an der Video-Encoder, so dass -bf:v 4
der Encoder 4 B-Frames verwenden würde.
Die wichtigsten Bestandteile sind das -cq:v 19
und die -rc:v vbr_hq
Argumente, mit denen Sie den Encoder sowohl mit einer voreingestellten variablen Bitrate als auch mit einer maximal zulässigen Bitrate ( -b:v
und -maxrate:v
) abstimmen können, während Sie einen CRF-Wert von 19 einhalten .
Und jetzt ein paar Anmerkungen zu NVENC und zur Optimierung für hochwertige Codierungen:
Wie bei jedem anderen hardwarebasierten Encoder unterliegt NVENC mehreren Einschränkungen. Insbesondere bei HEVC gelten die folgenden bekannten Einschränkungen:
Auf Pascal:
Für HEVC-Codierungen gelten die folgenden Einschränkungen:
- CTU-Größen über 32 werden nicht unterstützt.
- B-Frames in HEVC werden ebenfalls nicht unterstützt.
- Die vom NVENC-Encoder unterstützten Texturformate begrenzen die Farbräume, mit denen der Encoder arbeiten kann. Im Moment unterstützen wir 4: 2: 0 (8-Bit) und 4: 4: 4 (für 10-Bit). Fremdformate wie 4: 2: 2 10-Bit werden nicht unterstützt. Dies wirkt sich auf einige Workflows aus, in denen solche Farbräume erforderlich sind.
- Die Vorausschau-Steuerung ist ebenfalls auf 32 Frames beschränkt. In diesem Editorial finden Sie möglicherweise weitere Informationen.
Turing bietet alle für Pascal verfügbaren Verbesserungen, einschließlich der B-Frame-Unterstützung für HEVC und der Möglichkeit, B-Frames als Referenz zu verwenden. In dieser Antwort finden Sie ein Beispiel für diese Funktion.
Und bei Maxwell Gen 2 (GPUs der GM200x-Serie):
Bei der HEVC-Codierung fehlen die folgenden Funktionen:
- Sample Adaptive Offset (SAO) Schleifenfilterfunktionen.
- Adaptive Quantisierung
- Vorausschau-Geschwindigkeitskontrolle.
Die Auswirkung für Maxwell ist, dass bewegungsintensive Szenen mit HEVC unter eingeschränkten Bitraten aufgrund der fehlenden Lookahead-Funktionen und der SAO-Schleifenfilterfunktionen (Adaptive Sample Offset) unter Artefakten (Blockiness) leiden können. Pascal hat diese Funktion etwas verbessert, aber je nach der Version des SDK, mit dem der Video-Encoder erstellt wurde, sind möglicherweise nicht alle Funktionen verfügbar.
Beispielsweise erfordert der Modus für gewichtete Vorhersage für H.264-Codierungen in Pascal NVENC SDK 8.0x und höher, und dieser Codierungsmodus deaktiviert auch die B-Frame-Unterstützung. Ebenso kann die Kombination von hardwarebasierten Skalierern, die auf den Nvidia Performance Primitives (NPP) mit NVENC ausgeführt werden, zu Leistungsverbesserungen bei Videoskalierungsanwendungen führen, und zwar auf Kosten der Skalierung von Artefakten, insbesondere bei hochskaliertem Inhalt. Dies wirkt sich auch auf die Videokodierungs-Pipeline aus, da die NPP-Skalierungsfunktionen von den CUDA-Kernen auf der GPU ausgeführt werden. Daher sollte die durch die zusätzliche Last verursachte Auswirkung auf die Leistung von Fall zu Fall analysiert werden, um festzustellen, ob die Leistungsqualität stimmt Kompromiss ist akzeptabel.
Beachten Sie Folgendes: Ein hardwarebasierter Encoder bietet immer eine etwas geringere Anpassung als eine entsprechende softwarebasierte Implementierung, sodass sich Ihre Laufleistung und die akzeptable Ausgabequalität immer unterscheiden.
Und für ihre referenz:
Mit FFmpeg können Sie jederzeit auf die Einstellungen eines Encoders zugreifen, um sie anzupassen:
ffmpeg -h encoder {encoder-name}
Für NVENC-basierte Encoder können Sie also Folgendes ausführen:
ffmpeg -h encoder=hevc_nvenc
ffmpeg -h encoder=h264_nvenc
Sie können auch alle NVENC-basierten Encoder und NPP-basierten Scaler (sofern als solche erstellt) anzeigen, indem Sie Folgendes ausführen:
for i in encoders decoders filters; do
echo $i:; ffmpeg -hide_banner -${i} | egrep -i "npp|cuvid|nvenc|cuda"
done
Beispielausgabe auf meinem Prüfstand:
encoders:
V..... h264_nvenc NVIDIA NVENC H.264 encoder (codec h264)
V..... nvenc NVIDIA NVENC H.264 encoder (codec h264)
V..... nvenc_h264 NVIDIA NVENC H.264 encoder (codec h264)
V..... nvenc_hevc NVIDIA NVENC hevc encoder (codec hevc)
V..... hevc_nvenc NVIDIA NVENC hevc encoder (codec hevc)
decoders:
V..... h263_cuvid Nvidia CUVID H263 decoder (codec h263)
V..... h264_cuvid Nvidia CUVID H264 decoder (codec h264)
V..... hevc_cuvid Nvidia CUVID HEVC decoder (codec hevc)
V..... mjpeg_cuvid Nvidia CUVID MJPEG decoder (codec mjpeg)
V..... mpeg1_cuvid Nvidia CUVID MPEG1VIDEO decoder (codec mpeg1video)
V..... mpeg2_cuvid Nvidia CUVID MPEG2VIDEO decoder (codec mpeg2video)
V..... mpeg4_cuvid Nvidia CUVID MPEG4 decoder (codec mpeg4)
V..... vc1_cuvid Nvidia CUVID VC1 decoder (codec vc1)
V..... vp8_cuvid Nvidia CUVID VP8 decoder (codec vp8)
V..... vp9_cuvid Nvidia CUVID VP9 decoder (codec vp9)
filters:
... hwupload_cuda V->V Upload a system memory frame to a CUDA device.
... scale_npp V->V NVIDIA Performance Primitives video scaling and format conversion
slow
umfast
in Ihrem ersten Befehl. CRF ist in nicht implementiertnvenc
.