Nvidia Nvenc Преобразование видео из mxf в mp4 с ошибкой для нескольких потоков внутри - PullRequest
1 голос
/ 11 марта 2019

Я пытаюсь преобразовать видео с несколькими видеопотоками и одним аудиопотоком из формата mxf в формат mp4 и получаю сообщение об ошибке.Как я могу решить эту проблему?Спасибо.

E:\video>ffmpeg -loglevel error -y -i E:\video\19_12_2018\Files\MEDIA\media_data.mxf -map 0 -c:v h264_nvenc -acodec copy nvidia_output.mp4

[h264_nvenc @ 0000020b30c86e80] OpenEncodeSessionEx failed: out of memory (10)
[h264_nvenc @ 0000020b30c86e80] No NVENC capable devices found
Error initializing output stream 0:2 -- Error while opening encoder for output stream #0:2 - maybe incorrect parameters such as bit_rate, rate, width or height

[h264_nvenc @ 00000204c1e37040] OpenEncodeSessionEx failed: out of memory (10)
[h264_nvenc @ 00000204c1e37040] No NVENC capable devices found
[h264_nvenc @ 00000204c1e37040] Nvenc unloaded
[jpeg2000 @ 00000204c2d90080] End mismatch 1
    Last message repeated 1 times
Error initializing output stream 0:2 -- Error while opening encoder for output stream #0:2 - maybe incorrect parameters such as bit_rate, rate, width or height

Мой выход FFPROBE

E:\video>ffmpeg ffprobe
ffmpeg version 4.1 Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 8.2.1 (GCC) 20181017
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --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-libxvid --enable-libaom --enable-libmfx --enable-amf 
--enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec
 --enable-dxva2 --enable-avisynth
  libavutil      56. 22.100 / 56. 22.100
  libavcodec     58. 35.100 / 58. 35.100
  libavformat    58. 20.100 / 58. 20.100
  libavdevice    58.  5.100 / 58.  5.100
  libavfilter     7. 40.101 /  7. 40.101
  libswscale      5.  3.100 /  5.  3.100
  libswresample   3.  3.100 /  3.  3.100
  libpostproc    55.  3.100 / 55.  3.100

1 Ответ

2 голосов
/ 18 апреля 2019

Ошибка, которую вы видите, ожидается, если вы используете графический процессор NVIDIA потребительского уровня, в котором максимальный размер одновременного сеанса NVENC равен 2 на уровне прошивки и драйвера. См. NVIDIA GPU Matrix для получения дополнительной информации об этом.

Есть два способа преодолеть это ограничение:

1. Явно выберите видеопоток, который вы хотите кодировать , с помощью опций -map, чтобы только два видеопотока кодировались в любой момент времени за сеанс. В приведенном ниже примере явно выбираются только первый и второй видеопоток:

E:\video>ffmpeg -loglevel error -y -i E:\video\19_12_2018\Files\MEDIA\media_data.mxf -map 0:v:0 -map 0:v:1 -map:0:a -c:v h264_nvenc -acodec copy nvidia_output.mp4

Было бы замечательно, если бы вы предоставили вывод ffprobe для входного файла, с которым вы работаете, и таким образом мы можем предложить, что делать с другими видеопотоками. Альтернативой такому было бы использование программного кодера (например, x264), если это необходимо.

2. Переопределите вышеупомянутый предел количества сеансов NVENC выше: Это потребует от вас исправления драйвера NVIDIA, как описано в этом репозитории. Инструкции для Linux также доступны здесь .

...