x86路由也玩核显QSV转码,Docker搭建Handbrake
略懂的大龙猫
编辑于 2023年04月25日 00:18

前几天我的x86路由更新了核显驱动,这下小主机的核显不浪费可以用于视频转码了。接下来我介绍通过Docker搭建Handbrake,以及如何使用核显QSV转码。

首先确定你的Openwrt系统是否支持核显驱动,在SSH中输入“ls /dev/dri”确认是否有核显驱动。Intel的核显有一个QSV转码转码功能很强(UHD630转码性能可以赶上GTX1050),所以用来转码还是可以的。

如果有核显驱动,那么我们用Docker搭建Handbrake时就可以填写参数调用核显进行解码。Handbrake的docker版开源地址:

https://github.com/jlesage/docker-handbrake

首先分享一下我的docker-compose文件:

代码块
JavaScript
自动换行
复制代码
version: '3.3'
services:
    handbrake:
        container_name: handbrake
        ports:
            - '5800:5800'
        volumes:
            - './config:/config:rw'
            - './storage:/storage:ro'
            - './watch:/watch:rw'
            - './output:/output:rw'
        devices:
            - /dev/dri
        environment:
            - LANG=zh_CN.UTF-8
            - AUTOMATED_CONVERSION_PRESET='Hardware/H.265 QSV 1080p'
            - AUTOMATED_CONVERSION_KEEP_SOURCE=0
            - USER_ID=0
        image: 'jlesage/handbrake:latest'
复制成功

逐条讲解一下参数的意义:

ports:

           - '5800:5800&#​39;

用于开放5800端口访问GUI界面(不使用GUI界面也可以使用自动转码)。

volumes:

           - './config:/config:rw&#​39;

           - './storage:/storage:ro&#​39;

           - './watch:/watch:rw&#​39;

           - './output:/output:rw&#​39;

用于映射路径。第一个是Handbrake配置路径;第二个是Handbrake可以访问本机的存储路径;第三个是自动转码源文件夹;第四个是输出文件夹。

我建议用docker-compose搭建镜像时,首先在主机新建一个docker-compose文件夹,每个镜像再新建以镜像名命名的文件夹方便管理配置和文件,我把这四个文件夹都设置在了./docker-compose/handrake文件夹。(实际可以根据个人需求优化,比如第二条可以修改成下载文件夹方便直接访问下载目录进行解码,第四条输出文件夹可以设为电影文件夹转好码直接存档)

devices:

           - /dev/dri

用于调用核显驱动

environment:

           -.UTF-8

           - AUTOMATED_CONVERSION_PRESET='Hardware/H.265 QSV 1080p&#​39;

           - AUTOMATED_CONVERSION_KEEP_SOURCE=0

           - USER_ID=0

用于环境参数设置(更多参数设置具体官方有英文说明)。第一条是设置程序中文界面;第二条是修改默认解码方式为QSV(核显需要支持QSV,否则不用添加这条);第三条是watch文件夹转码完成后自动删除文件(不想删除源文件不要添加这条);第四条是以root权限运行(防止调用核显驱动失败)。

我把docker-compose.yaml放到./docker-compose/handrake然后运行docker-compose up -d就可以拉取镜像并运行了。

注意此时进入GUI界面是乱码的,有的教程会教你在环境参数里添加ENABLE_CJK_FONT=1,事实上这样做很可能导致镜像运行后无法访问GUI界面。我推荐一个方法,首先在电脑上找到一个中文字体(随便找一个都可以,我用的是阿里巴巴普惠体)。复制到小主机,然后用docker cp命令把这个字体复制到docker里。

代码块
JavaScript
自动换行
复制代码
docker cp 字体文件地址 docker名称:/usr/share/fonts 
#举例 docker cp /mnt/sata2-1/docker-compose/firefox/AlibabaPuHuiTi.ttf 8a373b071ebe:/usr/share/fonts
复制成功

这下Handbrake的界面变成中文了。GUI界面可以设置解码参数比较直观,但是玩x86路由要的是自动化。所以可以通过将文件保存到watch文件夹,然后再运行容器进行自动转码(你还可以通过配合使用Linux脚本实现更多自动化设置)

转码性能方面UHD630转码1个2小时H.264 1080P格式文件到H.265 1080P需要2小时,下面是CPU占用情况:

就介绍到这里!