使用FFmpeg CUDA加速降低MPEG-4视频码率时滤镜转换报错如何解决
问题原因
你遇到的报错本质是硬解码输出的CUDA格式帧存储在GPU显存中,而你使用的原生MPEG-4编码器仅支持处理CPU内存中的像素格式,FFmpeg无法自动完成跨硬件的格式转换,因此触发过滤器链初始化失败。
解决方案
方案1:保留GPU解码+CPU编码(输出MPEG-4格式)
在命令中添加hwdownload滤镜,将显存中的帧下载到内存并转换为适配的像素格式即可,修改后命令如下:
ffmpeg -vsync 0 -hwaccel cuda -c:v mpeg4_cuvid -i "F:\dataset\celeb-df-v1\Celeb-real\id0_0002.mp4" -vf hwdownload,format=yuv420p -c:v mpeg4 -b:v 574k -y "F:\dataset\celeb-df-v1\compress\id0_0002.mp4"
该方案解码环节仍用GPU加速,编码环节用CPU生成标准MPEG-4编码的视频,满足输出格式要求的同时提升运行效率。
方案2:全GPU加速(输出H.264格式)
NVIDIA硬件编码器不支持MPEG-4格式编码,如果你可以接受输出H.264编码的视频,可以使用全GPU流程,性能最优,修改后命令如下:
ffmpeg -vsync 0 -hwaccel cuda -hwaccel_output_format cuda -c:v mpeg4_cuvid -i "F:\dataset\celeb-df-v1\Celeb-real\id0_0002.mp4" -c:v h264_nvenc -b:v 574k -y "F:\dataset\celeb-df-v1\compress\id0_0002.mp4"
该方案全程不需要将视频帧传输到CPU内存,转码速度最快。
内容的提问来源于stack exchange,提问作者陆守鹏
相关产品推荐
相关产品推荐

