前言
最近Hetzner活动免除了AX42杜甫的安装费,作为一名mjj手痒难耐,py唯一佬获得AX4224小时使用权。
鉴于该杜甫有一个不错的780M型号的GPU,决定测试一下ffmpeg编码视频能力
环境说明
服务器:AX42
系统平台:Debian sid(必须)
ffmpeg:lastest release
升级系统
Hetzner官方只提供debian12官方镜像,所以在安装了debian12之后,需要修改apt源到sid
(为什么要升级到不稳定分支?debian12的libva版本不支持ffmpeg调用vaapi中的libass模块,提示版本过低)
- 备份当前源列表:
cp /etc/apt/sources.list /etc/apt/sources.list.bak
- 编辑 sources.list 文件:
nano /etc/apt/sources.list
- 修改源列表并更新系统 :
apt update && apt full-upgrade -y
- 重启系统:
reboot
配置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
1.下载ffmpeg release
wget https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-n6.1-latest-linux64-gpl-6.1.tar.xz
这里我们选择ffmpeg 6.1(防止版本过低或者过高的问题XD)
2. 解压
tar Jxvf ffmpeg-n6.1-latest-linux64-gpl-6.1.tar.xz
3.添加到系统默认指令
nano ~/.bashrc
到最下面 添加ffmpeg路径后保存
export PATH="/root/ffmpeg-n6.1-latest-linux64-gpl-6.1/bin:$PATH"
保存文件并运行以下命令使更改生效:
source ~/.bashrc
使用ffmpeg指令验证是否成功
ffmpeg -version
安装所需字体
由于系统中并不包含中文字体,所以需要自己下载所需字体后刷新,下面给出一些选择
apt update
apt install fontconfig
apt install fonts-dejavu-core
我喜欢用鸿蒙字体(HarmonyOS Sans),你如果有自己喜欢的字体,可以将字体文件夹放入/usr/local/share/fonts下,然后刷新字体库
fc-cache -fv
验证字体是否成功安装
fc-list | grep "Harmony"
如上输出即为正确安装
使用ffmpeg压制视频
请注意 调用Radeon 780M进行硬件加速需要使用VAAPI,而不是AMF
注意是 VA-API而不是AMD-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,非常感谢大佬的思路
部分指令参考来源:ffmpeg文档