我想使用ffmpeg结合NVIDIA GPU来加速视频的编码和解码。
根据NVIDIA官网的介绍:
NVIDIA GPU包含一个或多个硬件解码器和编码器(与CUDA核心分离),为多种流行的编解码器提供完全加速的硬件编解码。通过卸载解码/编码操作,图形引擎和CPU可以用于其他操作。
我的问题是:我能否使用CUDA核心来进行视频编码和解码,也许更快?
我想使用ffmpeg结合NVIDIA GPU来加速视频的编码和解码。
根据NVIDIA官网的介绍:
NVIDIA GPU包含一个或多个硬件解码器和编码器(与CUDA核心分离),为多种流行的编解码器提供完全加速的硬件编解码。通过卸载解码/编码操作,图形引擎和CPU可以用于其他操作。
我的问题是:我能否使用CUDA核心来进行视频编码和解码,也许更快?
支持的GPU请查看支持的GPU矩阵:
CUDA
ffmpeg -hwaccel cuda -i input output
CUVID
ffmpeg -c:v h264_cuvid -i input output
使用NVDEC和NVENC进行完整的硬件转码:
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input -c:v h264_nvenc -preset slow output
如果编译FFmpeg时支持libnpp,则可以将基于GPU的缩放器插入链中:ffmpeg -hwaccel_device 0 -hwaccel cuda -i input -vf scale_npp=-1:720 -c:v h264_nvenc -preset slow output.mkv
FFmpeg提供了一个硬件加速的子系统,其中包括NVIDIA:https://trac.ffmpeg.org/wiki/HWAccelIntro
为了启用支持使用NVIDIA GPU辅助编码,您需要:
--enable-nvenc
参数的FFmpeg(如果在配置时检测到驱动程序,则默认开启)正如Mike提到的那样,FFmpeg包装了一些这些硬件加速技术。您应该使用它,而不是首先采用更低级别的方法(官方NVIDIA库)!
表格显示,NVENC可能是您的选择。
但是:要小心并进行一些基准测试。虽然GPU编码器应该非常快,但与CPU编码器相比,它们在视觉质量方面也更差。
需要检查的问题是:当针对某个给定比特率时,GPU编码器是否与CPU编码器相竞争?我认为不是(除非是非常高的比特率或非常糟糕的质量),但这取决于您的用例。 GPU编码不是一个提供仅优点的万能药。
对于 AMD 显卡,使用以下-vcodec 选项:
Windows:
h264_amf
hevc_amf
Linux:
h264_vaapi
hevc_vaapi
ffmpeg -i input.mp4 -b:v 10400k -vcodec h264_amf -vf crop=1920:848:0:116 -c:a copy output.mp4
ffmpeg -i input.mp4 -b:v 10400k -vcodec hevc_amf -vf crop=1920:848:0:116 -c:a copy output.mp4
ffmpeg -i input.mp4 -b:v 10400k -vcodec h264_vaapi -vf crop=1920:848:0:116 -c:a copy output.mp4
ffmpeg -i input.mp4 -b:v 10400k -vcodec hevc_vaapi -vf crop=1920:848:0:116 -c:a copy output.mp4