我在一台配备 AMD Radion HD 7700 的机器上运行ffmpeg
Windows 10。硬件加速的 h.264 运行良好,而 HEVC 编码失败。版本为ffmpeg
:
ffmpeg version 5.1.2-essentials_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 --enable-gmp --enable-lzma --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-sdl2 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-libass --enable-libfreetype --enable-libfribidi --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libmfx --enable-libgme --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libtheora --enable-libvo-amrwbenc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-librubberband
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
此命令为何有效:
ffmpeg -hwaccel auto -i "E:\Ripped MKVs\Duel\Duel_t01.mkv" -map 0:v -c:v h264_amf -y "E:\Processed Videos\Duel.mkv"
而这个失败了:
ffmpeg -hwaccel auto -i "E:\Ripped MKVs\Duel\Duel_t01.mkv" -map 0:v -c:v hevc_amf -y "E:\Processed Videos\Duel.mkv"
错误如下:
[hevc_amf @ 000002c4def2b780] CreateComponent(AMFVideoEncoderHW_HEVC) failed with error 10
Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
Conversion failed!
答案1
我不是这个领域的专家,但根据使用多张显卡的经验证据,以下是我对我提出的问题的回答:
看起来,当ffmpeg
使用软件编解码器时,所有编码都由编解码器完成。另一方面,当指定硬件编解码器时(即而-c:v hevc_amf
不是-c:v hevc
),则编解码器实际上根本没有进行任何编码。相反,它是“真实”编解码器的包装器,在显卡上实现。如果显卡不支持指定编解码器所需的编码方法,那么您将收到我收到的错误:
[hevc_amf @ 000002c4def2b780] CreateComponent(AMFVideoEncoderHW_HEVC) failed with error 10
Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
Conversion failed!
以下信息可能对您有帮助。我认为这“大部分”是正确的:
有 3 家 GPU 制造商:AMD、NVIDIA 和 Intel。AMD 和 NVIDIA 将 GPU 出售给显卡制造商。例如,我有 VisionTek 显卡。此卡具有 AMD GPU,因此在决定使用哪种编解码器时,您只关心该卡具有 AMD GPU 这一事实。另一个例子,我还有一张 EVGA GeForce GTX 1650 显卡。虽然由 EVGA 制造,但它具有 NVIDIA GPU(当然是 NVIDIA GeForce 1650 GPU)。英特尔 GPU 内置于英特尔的许多 CPU 产品线中(但不是全部)。
AMD 和 Nvidia 都发布了显卡可能使用的特定 GPU 的规格。这些规格说明了支持哪些视频编解码器。因此,例如,如果您知道自己想要执行 HEVC 编码,则可以验证显卡是否支持您想要执行的 HEVC 编码类型。