GyanD / codexffmpeg

Support for https://www.gyan.dev/ffmpeg
1.43k stars 108 forks source link

ffmpeg 6 nvenc fails #96

Closed emperor06 closed 1 year ago

emperor06 commented 1 year ago

I can't get nvenc to work with the latest ffmpeg build for Windows (both 6.0-full and 6.0-essential).

Latest ffmpeg 6 (fail)

gyan6$ ./ffmpeg.exe -hwaccel cuvid -i test.mkv -c:v hevc_nvenc out.mkv

ffmpeg version 6.0-full_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developers built with gcc 12.2.0 (Rev10, Built by MSYS2 project) configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --en able-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --ena ble-libcaca --enable-sdl2 --enable-libaribb24 --enable-libdav1d --enable-libdavs2 --enable-libuavs3d --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-libwebp --enab le-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libaom --enable-libjxl --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --ena ble-frei0r --enable-libfreetype --enable-libfribidi --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --ena ble-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libvpl --enable-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcd io --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo- amrwbenc --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --en able-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint libavutil 58. 2.100 / 58. 2.100 libavcodec 60. 3.100 / 60. 3.100 libavformat 60. 3.100 / 60. 3.100 libavdevice 60. 1.100 / 60. 1.100 libavfilter 9. 3.100 / 9. 3.100 libswscale 7. 1.100 / 7. 1.100 libswresample 4. 10.100 / 4. 10.100 libpostproc 57. 1.100 / 57. 1.100 WARNING: defaulting hwaccel_output_format to cuda for compatibility with old commandlines. This behaviour is DEPRECATED and will be removed in the future. Please explicitly set " -hwaccel_output_format cuda". Input #0, matroska,webm, from 'test.mkv': Metadata: encoder : libebml v1.4.4 + libmatroska v1.7.1 creation_time : 2023-04-26T17:01:25.000000Z Duration: 00:00:21.20, start: 0.000000, bitrate: 1812 kb/s Stream #0:0: Video: hevc (Main 10), yuv420p10le(tv), 1528x640 [SAR 1:1 DAR 191:80], 30 fps, 30 tbr, 1k tbn (default) Metadata: BPS : 1807221 DURATION : 00:00:21.200000000 NUMBER_OF_FRAMES: 635 NUMBER_OF_BYTES : 4789137 _STATISTICS_WRITING_APP: mkvmerge v75.0.0 ('Goliath') 64-bit _STATISTICS_WRITING_DATE_UTC: 2023-04-26 17:01:25 _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES Stream mapping: Stream #0:0 -> #0:0 (hevc (native) -> hevc (hevc_nvenc)) Press [q] to stop, [?] for help [hevc_nvenc @ 000001a326a7d4c0] B frames as references are not supported [hevc_nvenc @ 000001a326a7d4c0] Provided device doesn't support required NVENC features

Ffmpeg 5 (works)

It was working fine with ffmpeg 5 build, as shown here.

gyan5$ ./ffmpeg.exe -hwaccel cuvid -i test.mkv -c:v hevc_nvenc out.mkv

ffmpeg version 5.1.2-full_build-www.gyan.dev Copyright (c) 2000-2022 the FFmpeg developers built with gcc 12.1.0 (Rev2, Built by MSYS2 project) configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --en able-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --ena ble-libcaca --enable-sdl2 --enable-libaribb24 --enable-libdav1d --enable-libdavs2 --enable-libuavs3d --enable-libzvbi --enable-librav1e --enable-libsvtav1 --enable-libwebp --enab le-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libaom --enable-libjxl --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --ena ble-frei0r --enable-libfreetype --enable-libfribidi --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --ena ble-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libmfx --enable-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcd io --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo- amrwbenc --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --en able-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint libavutil 57. 28.100 / 57. 28.100 libavcodec 59. 37.100 / 59. 37.100 libavformat 59. 27.100 / 59. 27.100 libavdevice 59. 7.100 / 59. 7.100 libavfilter 8. 44.100 / 8. 44.100 libswscale 6. 7.100 / 6. 7.100 libswresample 4. 7.100 / 4. 7.100 libpostproc 56. 6.100 / 56. 6.100 WARNING: defaulting hwaccel_output_format to cuda for compatibility with old commandlines. This behaviour is DEPRECATED and will be removed in the future. Please explicitly set " -hwaccel_output_format cuda". Input #0, matroska,webm, from 'test.mkv': Metadata: encoder : libebml v1.4.4 + libmatroska v1.7.1 creation_time : 2023-04-26T17:01:25.000000Z Duration: 00:00:21.20, start: 0.000000, bitrate: 1812 kb/s Stream #0:0: Video: hevc (Main 10), yuv420p10le(tv), 1528x640 [SAR 1:1 DAR 191:80], 30 fps, 30 tbr, 1k tbn (default) Metadata: BPS : 1807221 DURATION : 00:00:21.200000000 NUMBER_OF_FRAMES: 635 NUMBER_OF_BYTES : 4789137 _STATISTICS_WRITING_APP: mkvmerge v75.0.0 ('Goliath') 64-bit _STATISTICS_WRITING_DATE_UTC: 2023-04-26 17:01:25 _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES Stream mapping: Stream #0:0 -> #0:0 (hevc (native) -> hevc (hevc_nvenc)) Press [q] to stop, [?] for help Output #0, matroska, to 'out.mkv': Metadata: encoder : Lavf59.27.100 Stream #0:0: Video: hevc (Main 10), cuda(tv, progressive), 1528x640 [SAR 1:1 DAR 191:80], q=2-31, 2000 kb/s, 30 fps, 1k tbn (default) Metadata: BPS : 1807221 DURATION : 00:00:21.200000000 NUMBER_OF_FRAMES: 635 NUMBER_OF_BYTES : 4789137 _STATISTICS_WRITING_APP: mkvmerge v75.0.0 ('Goliath') 64-bit _STATISTICS_WRITING_DATE_UTC: 2023-04-26 17:01:25 _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES encoder : Lavc59.37.100 hevc_nvenc Side data: cpb: bitrate max/min/avg: 0/0/2000000 buffer size: 4000000 vbv_delay: N/A frame= 635 fps=0.0 q=23.0 Lsize= 5383kB time=00:00:21.16 bitrate=2083.2kbits/s speed=23.7x video:5378kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.101532%

Ffmpeg 6 from BtbN (works)

It also works fine with BtnN's build (https://github.com/BtbN/FFmpeg-Builds/releases/tag/autobuild-2023-04-26-12-48)

btbn$ ./ffmpeg.exe -hwaccel cuvid -i test.mkv -c:v hevc_nvenc out.mkv

ffmpeg version N-110399-gf7d64881f8-20230426 Copyright (c) 2000-2023 the FFmpeg developers built with gcc 12.2.0 (crosstool-NG 1.25.0.152_89671bf) configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-w64-mingw32- --arch=x86_64 --target-os=mingw32 --enable-gpl -- enable-version3 --disable-debug --disable-w32threads --enable-pthreads --enable-iconv --enable-libxml2 --enable-zlib --enable-libfreetype --enable-libfribidi --enable-gmp --enabl e-lzma --enable-fontconfig --enable-libvorbis --enable-opencl --disable-libpulse --enable-libvmaf --disable-libxcb --disable-xlib --enable-amf --enable-libaom --enable-libaribb24 --enable-avisynth --enable-chromaprint --enable-libdav1d --enable-libdavs2 --disable-libfdk-aac --enable-ffnvcodec --enable-cuda-llvm --enable-frei0r --enable-libgme --enable-li bkvazaar --enable-libass --enable-libbluray --enable-libjxl --enable-libmp3lame --enable-libopus --enable-librist --enable-libssh --enable-libtheora --enable-libvpx --enable-libw ebp --enable-lv2 --disable-libmfx --enable-libvpl --enable-openal --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopen mpt --enable-librav1e --enable-librubberband --enable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --disable- libdrm --disable-vaapi --enable-libvidstab --enable-vulkan --enable-libshaderc --enable-libplacebo --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-l ibzimg --enable-libzvbi --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-ldflags=-pthread --extra-ldexeflags= --extra-libs=-lgomp --extra-version=20230426 libavutil 58. 6.100 / 58. 6.100 libavcodec 60. 10.100 / 60. 10.100 libavformat 60. 5.100 / 60. 5.100 libavdevice 60. 2.100 / 60. 2.100 libavfilter 9. 5.100 / 9. 5.100 libswscale 7. 2.100 / 7. 2.100 libswresample 4. 11.100 / 4. 11.100 libpostproc 57. 2.100 / 57. 2.100 [vist#0:0/hevc @ 0000020c4227ecc0] WARNING: defaulting hwaccel_output_format to cuda for compatibility with old commandlines. This behaviour is DEPRECATED and will be removed in the future. Please explicitly set "-hwaccel_output_format cuda". Input #0, matroska,webm, from 'test.mkv': Metadata: encoder : libebml v1.4.4 + libmatroska v1.7.1 creation_time : 2023-04-26T17:01:25.000000Z Duration: 00:00:21.20, start: 0.000000, bitrate: 1812 kb/s Stream #0:0: Video: hevc (Main 10), yuv420p10le(tv), 1528x640 [SAR 1:1 DAR 191:80], 30 fps, 30 tbr, 1k tbn (default) Metadata: BPS : 1807221 DURATION : 00:00:21.200000000 NUMBER_OF_FRAMES: 635 NUMBER_OF_BYTES : 4789137 _STATISTICS_WRITING_APP: mkvmerge v75.0.0 ('Goliath') 64-bit _STATISTICS_WRITING_DATE_UTC: 2023-04-26 17:01:25 _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES Stream mapping: Stream #0:0 -> #0:0 (hevc (native) -> hevc (hevc_nvenc)) Press [q] to stop, [?] for help Output #0, matroska, to 'out.mkv': Metadata: encoder : Lavf60.5.100 Stream #0:0: Video: hevc (Main 10), cuda(tv, progressive), 1528x640 [SAR 1:1 DAR 191:80], q=2-31, 2000 kb/s, 30 fps, 1k tbn (default) Metadata: BPS : 1807221 DURATION : 00:00:21.200000000 NUMBER_OF_FRAMES: 635 NUMBER_OF_BYTES : 4789137 _STATISTICS_WRITING_APP: mkvmerge v75.0.0 ('Goliath') 64-bit _STATISTICS_WRITING_DATE_UTC: 2023-04-26 17:01:25 _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES encoder : Lavc60.10.100 hevc_nvenc Side data: cpb: bitrate max/min/avg: 0/0/2000000 buffer size: 4000000 vbv_delay: N/A [out#0/matroska @ 0000020c42279540] video:5378kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.101750% frame= 635 fps=0.0 q=23.0 Lsize= 5383kB time=00:00:21.16 bitrate=2083.3kbits/s speed=23.8x

GyanD commented 1 year ago

There was a regression in ffmpeg which was corrected on Mar 10 - after 6.0 was released.

The "Ffmpeg 6 from BtbN" is actually the 2023-04-26 git build.

You can use any of my git builds from after Mar 10, like https://github.com/GyanD/codexffmpeg/releases/tag/2023-04-24-git-2aad9765ef

or add -b_ref_mode 0 to your command.

emperor06 commented 1 year ago

Nice, thanks.