前言
最近Hetzner活动免除了AX42杜甫的安装费,作为一名mjj手痒难耐,py唯一佬获得AX4224小时使用权。
鉴于该杜甫有一个不错的780M型号的GPU,决定测试一下ffmpeg编码视频能力
详细文档见:我的博客
环境说明
服务器:AX42
系统平台:Debian sid(必须)
ffmpeg:lastest release
升级系统
Hetzner官方只提供debian12官方镜像,所以在安装了debian12之后,需要修改apt源到sid
(为什么要升级到不稳定分支?debian12的libva版本不支持ffmpeg调用vaapi中的libass模块,提示版本过低)
配置GPU
1.安装amd的3D驱动
apt update -y && apt install -y firmware-amd-graphics
2.安装开源驱动mesa-va-drivers和vainfo
apt update -y && apt install mesa-va-drivers vainfo -y
3.重启主机
reboot
4.验证硬件
ls -l /dev/dri
检查有无输出,特别是/dev/dri/renderD128
检查核显硬件是否正常运行
vainfo
安装ffmpeg
apt直接安装的ffmpeg可能缺斤少两,这里我们直接使用编译好的二进制文件,FFMPEG-Build
安装所需字体
由于系统中并不包含中文字体,所以需要自己下载所需字体后刷新
使用ffmpeg压制视频
请注意 调用Radeon 780M进行硬件加速需要使用VAAPI,而不是AMF
注意是 VA-API而不是AMD-AMF!!!
注意是 VA-API而不是AMD-AMF!!!
这里使用test文件夹为例示,压制视频和字幕文件为1.flv和1.ass
ffmpeg -vaapi_device /dev/dri/renderD128 -i 1.flv -vf 'subtitles=1.ass,format=nv12,hwupload' -c:v av1_vaapi -b:v 15M output.mp4
注意:format=nv12,hwupload参数是必须
如果你要使用DanmakuRender进行自动化弹幕文件压制,请修改global.yml中相关内容为:
# 硬件解码参数,默认由FFmpeg自动判断,如果出现问题可以设为空
hwaccel_args: [-vaapi_device, /dev/dri/renderD128]
# 视频编码器,NVIDIA设置为h264_nvenc,AMD设置为h264_amf,CPU设置为libx264
vencoder: h264_vaapi
advanced_render_args:
# 直接定义video filter,这里的{DANMAKU}代表弹幕文件路径
# 注意设置filter_complex之后将会禁用fps等其他有关filter的选项
filter_complex: subtitles=filename='{DANMAKU}',format=nv12,hwupload
速度
为了保证输出视频的画质质量,我们指定了输出视频的码率为15M,如果你知道更多支持的相关参数,可以私聊我共同学习
我没有测试过windows下使用AMF压制的速度,如果有本地使用Radeon 780M的大佬可以私聊我交流讨论一下
H264速度为6.64x
libx264的速度是3.64x,cpu占用满,根据速度区别,鉴定为正确使用硬件加速
HEVC速度为10x,速度最快,(太快了导致没有截图)
相比我现在正在使用12500,调用UHD770硬件加速(qsv),使用同视频+弹幕,且指定输出码率同样为15M,
h264_qsv的速度是5.3x
hevc_qsv的速度是2.16x
2024.07.10 Hostloc大佬anshi提供的netint T408硬件加速,h264_vaapi编码速度为4.3x
叠甲
感谢唯一佬提供的AX42独立服务器,么么哒
搜遍全网如何使用Radeon 核显对ffmpeg进行硬件加速编码,都没有教程
我一直以为应该使用amf来调用核显,怎么试都不行,直到看到Laizer大佬ax42部署jellyfin文章后才知道要用VAAPI,非常感谢大佬的思路