Warum ist der FFMPEG-CUDA-Decoder viel langsamer als der CPU-Decoder?

Warum ist der FFMPEG-CUDA-Decoder viel langsamer als der CPU-Decoder?
# cpu
ffmpeg -i test.ts -f null /dev/null -benchmark
# gpu
ffmpeg -hwaccel cuvid -hwaccel_output_format cuda -c:v h264_cuvid -i test.ts -f null /dev/null -benchmark

ffmpeg 4.4.2

Die CPU ist 1,5-mal schneller als die GPU.

Warum erwarte ich eigentlich, dass die GPU viel schneller sein wird?

Bitte beachten Sie, dass ich in dieser Pipeline überhaupt keine Kodierung durchführe.

Antwort1

-c:v h264_cuvidruft CUVID auf, was langsamer und weniger effizient ist als NVENC. Ersetzen Sie es durch-c:v h264_nvenc

CUVID zum Kodieren und Dekodieren ist Jahrzehnte alt und sollte als veraltet betrachtet werden. Es aktiviert alle CUDA-Kerne der GPU, um die Funktion auszuführen. Das wahrscheinlich gewünschte Verhalten besteht darin, NVENC oder NVDEC aufzurufen, die sowohl für die Videokodierung als auch für die Videodekodierung schneller und deutlich energieeffizienter sind.

Es gibt nützliche Möglichkeiten, CUDA zu verwenden, um Videocodierungsaufgaben mit FFmpeg zu beschleunigen. Hier finden Sie Beispiele von NVIDIA:https://docs.nvidia.com/video-technologies/video-codec-sdk/11.1/ffmpeg-with-nvidia-gpu/index.html

Lesen Sie auch die Dokumentation von FFmpeg, um zu erfahren, wie Sie modernes NVENC/NVDEC richtig aufrufen:https://trac.ffmpeg.org/wiki/HWAccelIntro#NVDECCUVID

verwandte Informationen