Windows下如何正确使用h264_amf实现FFmpeg硬件编码?
解决AMD Radeon R5 M330上FFmpeg h264_amf硬件编码失败问题
错误原因分析
报错CreateComponent(AMFVideoEncoderVCE_AVC) failed with error 36对应AMF框架的AMF_ERROR_NOT_SUPPORTED错误,说明你的Radeon R5 M330(搭载VCE 1.0编码引擎)不支持FFmpeg默认调用的AMF编码器组件——较新的AMF编码器实现主要针对GCN 2代及以上显卡优化,对老一代VCE 1.0硬件支持有限。
解决方法
1. 强制指定兼容的AMF编码器参数
在命令中添加-encoder vce_1参数,强制FFmpeg调用VCE 1.0兼容的编码器组件:
ffmpeg ^ -hide_banner ^ -v verbose ^ -i "%1" ^ -c:v h264_amf -encoder vce_1 -acodec copy -y out.mp4
如果仍失败,可尝试限制编码Profile为Baseline(VCE 1.0对High Profile支持不完善):
ffmpeg ^ -hide_banner ^ -v verbose ^ -i "%1" ^ -c:v h264_amf -profile baseline -acodec copy -y out.mp4
2. 启用D3D11硬件加速预处理
添加-hwaccel d3d11va参数,让FFmpeg用D3D11VA硬件解码输入视频,减少格式转换开销,同时帮助编码器更好地调用硬件资源:
ffmpeg ^ -hide_banner ^ -v verbose ^ -hwaccel d3d11va ^ -i "%1" ^ -c:v h264_amf -acodec copy -y out.mp4
3. 降级FFmpeg版本
你当前使用的FFmpeg 5.1.2对老GCN显卡的AMF支持有变动,建议降级到4.4.x系列稳定版,该版本对VCE 1.0硬件的兼容性更好。
4. 安装兼容的显卡驱动
不要使用Windows自动更新的通用驱动,安装AMD官方提供的Adrenalin 2020版或更早的驱动(新驱动已停止对老GCN显卡的AMF优化)。
备选方案:使用OpenCL编码器
如果AMF方案始终无法工作,可尝试基于OpenCL的h264_opencl编码器,对老AMD显卡兼容性更强:
ffmpeg ^ -hide_banner ^ -v verbose ^ -i "%1" ^ -c:v h264_opencl -acodec copy -y out.mp4
内容的提问来源于stack exchange,提问作者Harshiv
相关产品推荐
相关产品推荐

