FFMPEG - как определить узкое место в аппаратном транскодировании?
В приведенном примере я пытался перекодировать источник 4K h264 в выходной сигнал 1080p h264 с использованием ускорения Nvidia Harware.
Релевантная информация:
ffmpeg version git-2017-12-25-613f789 Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 7.2.0 (GCC)
configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-amf --enable-cuda --enable-cuvid --enable-d3d11va --enable-nvenc --enable-dxva2 --enable-avisynth --enable-libmfx
libavutil 56. 7.100 / 56. 7.100
libavcodec 58. 9.100 / 58. 9.100
libavformat 58. 3.100 / 58. 3.100
libavdevice 58. 0.100 / 58. 0.100
libavfilter 7. 7.100 / 7. 7.100
libswscale 5. 0.101 / 5. 0.101
libswresample 3. 0.101 / 3. 0.101
libpostproc 55. 0.100 / 55. 0.100
Используемая команда:
ffmpeg -c:v h264_cuvid -i "4K_input.mp4" -c:v h264_nvenc -preset slow -s 1920x1080 -c:a copy output.mkv
Соответствующие характеристики ПК:
GPU: (Gigabyte) GeForce GTX 1070 Ti
CPU: Intel Core i7 7700K
Memory: 8GB DDR4 2400MHz Single Channel.
SSD: Crucial CT525MX3
Хотя запись на Nvidia Desktop не имеет абсолютно никаких проблем для записи живого видео h264 с битрейтом до 50 Мбит / с, это кодирование со скоростью ниже 2600 кбит / с было чрезвычайно медленным с использованием всего лишь 35% графического процессора. Мне не удалось использовать 100% графического процессора для каких-либо параметров видео.
Вот почему я мог бы использовать несколько советов относительно того, как определить (подозреваемое) узкое место?
1 ответ
Транскодирование "GPU" не работает таким образом. Существуют фиксированные функциональные схемы, предназначенные для кодирования h264 на графических процессорах Nvidia, которые не являются частью пула векторных модулей. Вот почему вы указываете h264_nvenc
(nvenc специфичен для nvidia), а не универсальный gpu
кодировщик.
TLDR, вы не достигнете 100% GPU, потому что он на самом деле не использует GPU. Он использует отдельный компонент, который поставляется с вашим графическим процессором.