让群辉的ffmpeg用上硬件加速
2023年6月16日
编程
最近下了一些电视节目的录像,是古早的 RMVB 格式,需要转成 MP4 才能在 Plex 中播放,但是节目有点多,所以研究了一下硬件加速。群辉 DS220+ 是支持硬件加速的,但是想用起来着实有点不太容易。 # 更换 ffmpeg 群辉自带的 ffmpeg 是没有硬件加速模块的,必须用 Docker 安装一个新版本的 ffmpeg ,或者加入社区套件源,比如[矿神的套件源](https://spk7.imnks.com/)。从社区中下载的 ffmpeg 一般是带 vaapi 和 qsv 加速的。 下载后,可以运行下面的命令查看是否支持硬件加速 ```bash ffmpeg -hwaccels ``` 如果出现了一些名字,比如 `vaapi` `qsv` 则表示支持这些模式的硬件加速。 # 设置 ffmpeg 参数 这里暂时只记录 vaapi 加速的参数 ```bash ffmpeg6 -hwaccel vaapi \ -hwaccel_output_format vaapi \ -vaapi_device /dev/dri/renderD128 \ -i INPUT \ -vf 'format=nv12|vaapi,hwupload' \ -c:v h264_vaapi \ -c:a aac \ -format mp4 \ OUTPUT ``` 首先 `-hwaccel vaapi` 指定加速模式,`-hwaccel_output_format vaapi` 指定输出格式也用 vaapi 而不是回到软件模式,配合 `-vf 'format=nv12|vaapi,hwupload'` 可以避免一些错误,`-vaapi_device` 指定硬件。 # 改变用户或权限 这是个非常细节的坑,很多文章里面没有提到。设备 `/dev/dri/renderD128` 并不是所有用户都可以用的,它的权限是这样的 ```plaintext crw-rw---- 1 root videodriver 226, 128 Apr 5 15:53 /dev/dri/renderD128 ``` 该设备属于 root 用户和 videodriver 组,其他组中的用户是没有任何权限的! 所以,要么我们使用 root 用户执行,要么将这个设备的权限修改一下,添加 `o+x` 。也有[文章](https://timothybasanov.com/2018/12/08/hardware-accelerated-h264-encoding-synology-nas.html)说直接 `chmod 777` ,但这样可能有点太危险了。总之,用一般的用户是无法调用硬解的。但是如果是通过群辉套件安装的 Plex,用户 PlexMediaServer 已经在 videodriver 这个组里了,所以是可以直接调用的。我试了一下,群辉好像把 `usermod` 命令隐藏了,DSM中也没找到可以把用户加入 videodriver 的办法,所以要么切换到 root 用户执行,要么修改设备的权限,是比较稳妥的办法。
感谢您的阅读。本网站 MyZone 对本文保留所有权利。