Nvidia Nvenc 视频从 mxf 转换为 mp4 内部多个流出现错误
Nvidia Nvenc Video Conversion from mxf to mp4 getting error for multiple streams inside
我正在尝试将具有多个视频流和一个音频流的视频从 mxf 格式转换为 mp4 格式,但出现错误。我怎么解决这个问题?谢谢。
E:\video>ffmpeg -loglevel error -y -i E:\video_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
如果您使用的是消费级 NVIDIA GPU,其中在固件和驱动程序级别强制执行最大同时 NVENC 会话限制为 2,那么您看到的错误是预料之中的。有关详细信息,请参阅 NVIDIA GPU Matrix。
有两种方法可以克服此限制:
1.通过 -map
选项明确 select 您希望编码的视频流 ,这样每个会话在任何给定时间只编码两个视频流。下面的示例明确 select 仅第一个和第二个视频流:
E:\video>ffmpeg -loglevel error -y -i E:\video_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 驱动程序,如 this repository. Instructions for Linux are also available here 中所述。
我正在尝试将具有多个视频流和一个音频流的视频从 mxf 格式转换为 mp4 格式,但出现错误。我怎么解决这个问题?谢谢。
E:\video>ffmpeg -loglevel error -y -i E:\video_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
如果您使用的是消费级 NVIDIA GPU,其中在固件和驱动程序级别强制执行最大同时 NVENC 会话限制为 2,那么您看到的错误是预料之中的。有关详细信息,请参阅 NVIDIA GPU Matrix。
有两种方法可以克服此限制:
1.通过 -map
选项明确 select 您希望编码的视频流 ,这样每个会话在任何给定时间只编码两个视频流。下面的示例明确 select 仅第一个和第二个视频流:
E:\video>ffmpeg -loglevel error -y -i E:\video_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 驱动程序,如 this repository. Instructions for Linux are also available here 中所述。