什么是 HandBrake ?
HandBrake
是一款适用于Linux
、Mac
和Windows
的开源视频转码器。HandBrake
可以处理大多数常见的视频文件和格式,包括消费者和专业摄像机创建的文件、手机和平板电脑等移动设备的文件、游戏和计算机屏幕录制的文件,以及DVD
和蓝光光盘的文件。HandBrake
利用FFmpeg
、x264
和x265
等工具从这些源文件创建新的MP4
或MKV
视频文件。
什么是 docker-handbrake ?
docker-handbrake
实现了一个用于HandBrake
的Docker
容器。应用程序的图形用户界面可以通过现代的Web
浏览器访问(客户端无需安装或配置),也可以通过任何VNC
客户端进行访问。还提供了完全自动化模式:将文件放入监视文件夹中,让HandBrake
在没有任何用户交互的情况下处理它们。
安装
在群晖上以 Docker 方式安装。
在注册表中搜索 handbrake
,选择第一个 jlesage/handbrake
,版本选择 latest
。
本文写作时,
latest
版本对应为v24.01.2
;
卷
在 docker
文件夹中,创建一个新文件夹 handbrake
,并在其中建四个子文件夹 config
、output
、storage
和 watch
文件夹 | 装载路径 | 说明 |
---|---|---|
docker/handbrake/config |
/config |
存储其配置、状态、日志和任何需要持久性的文件 |
docker/handbrake/output |
/output |
存储转换后的视频文件 |
docker/handbrake/watch |
/watch |
存储需要转换的视频文件 |
docker/handbrake/storage |
/storage |
包含需要应用程序访问的主机文件 |
端口
本地端口不冲突就行,不确定的话可以用命令查一下
bash
# 查看端口占用
netstat -tunlp | grep 端口号
本地端口 | 容器端口 |
---|---|
5803 |
5800 |
默认暴露了 2
个端口,其中 5900
是 VNC
连接端口
如果没有 VNC
客户端的话,可以删掉
环境
可变 | 值 |
---|---|
LANG |
默认值为 en_US.UTF-8 ,改设为 zh_CN.UTF-8 |
TZ |
默认值为 Etc/UTC ,改设为 Asia/Shanghai |
更多的变量参数及功能介绍,请参考官方文档:https://github.com/jlesage/docker-handbrake#environment-variables
命令行安装
如果你熟悉命令行,可能用 docker cli
更快捷
如果你的设备支持
Intel Quicksync (QSV)
,可以增加一行--device /dev/dri
开启硬件加速编码
bash
# 新建文件夹 handbrake 和 子目录
mkdir -p /volume1/docker/handbrake/{config,output,storage,watch}
# 进入 handbrake 目录
cd /volume1/docker/handbrake
# 运行容器
docker run -d \
--restart unless-stopped \
--name handbrake \
-p 5803:5800 \
-v $(pwd)/config:/config:rw \
-v $(pwd)/output:/output:rw \
-v $(pwd)/storage:/storage:ro \
-v $(pwd)/watch:/watch:rw \
jlesage/handbrake
也可以用 docker-compose
安装,将下面的内容保存为 docker-compose.yml
文件
yaml
version: '3'
services:
handbrake:
image: jlesage/handbrake
container_name: handbrake
restart: unless-stopped
ports:
- 5803:5800
volumes:
- ./config:/config:rw
- ./output:/output:rw \
- ./storage:/storage:ro \
- ./watch:/watch:rw \
然后执行下面的命令
bash
# 新建文件夹 handbrake 和 子目录
mkdir -p /volume1/docker/handbrake/{config,output,storage,watch}
# 进入 handbrake 目录
cd /volume1/docker/handbrake
# 将 docker-compose.yml 放入当前目录
# 一键启动
docker-compose up -d
运行
在浏览器中输入 http://群晖IP:5803
就能看到主界面
中文界面
如果你配置了环境变量 LANG
为 zh_CN.UTF-8
,看到册主界面是👇这样的
这应该是容器里没有中文字体导致的,在网上搜索 Songti.ttc
,将下载的字体文件放到 handbrake
目录
Songti.ttc
下载地址:Songti.ttc(https://portrait.gitee.com/ishelo/QQZoneMood/blob/master/Songti.ttc)
将字体放到容器内即可
bash
# 从群晖拷贝到容器内
docker cp ./Songti.ttc handbrake:/usr/share/fonts/
## --- 以下几步为验证,可以不需要执行 --- ##
# 进入容器内
docker exec -it --user root handbrake /bin/bash
# 扫描字体目录并生成字体信息的缓存
fc-cache -vf
# 查看系统内所有中文字体及字体文件的路径
fc-list :lang=zh
必须要重启一次容器
原来的小方框已经可以正常显示了
转码本身是比较耗性能的,如果能使用硬件编解码会有效的降低 CPU
的占用,从官方说明看,HandBrake
支持 Intel Quick Sync Video
,只需要将设备/dev/dri
暴露在容器中即可。在大多数情况下,HandBrake
是可以成功访问/dev/dri
设备的
软件的使用,说简单也简单,说复杂也复杂,不过好在是中文界面,而且网上能找到使用教程,所以这里就不赘述了。
参考文档
HandBrake/HandBrake: HandBrake's main development repository
地址:https://github.com/HandBrake/HandBrake
HandBrake: Open Source Video Transcoder地址:https://handbrake.fr/
jlesage/docker-handbrake: Docker container for HandBrake