开源视频转码器HandBrake

什么是 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

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

相关推荐
sbjdhjd12 小时前
云安全 | Docker 容器逃逸复盘(二):2375 未授权接口如何突破容器管理边界
网络安全·docker·云原生·数据挖掘·开源·云计算·云安全
吴声子夜歌14 小时前
Docker入门与实战——初识Docker与容器
docker·容器
JavaPub-rodert15 小时前
公共 Docker 镜像源总失效?用 Harbor Proxy Cache 自建 Docker Hub 镜像缓存
java·缓存·docker
YZ12255216 小时前
【Docker专题】使用Docker部署Vue-Flask项目前后端分离版【前端Docker部署】
前端·vue.js·docker
MrSYJ16 小时前
Docker端口映射咋做的,模拟下。
docker·云原生·kubernetes
bluebonnet2718 小时前
【docker】容器内映射外部音频驱动
docker·容器·音视频
吴声子夜歌18 小时前
Docker入门与实战——核心概念与安装配置
运维·docker·容器
guo_wen_qiang1 天前
docker的备份与迁移
运维·docker·容器
cpolar技术支持1 天前
外网测试机的异常传不回内网?自托管 Sentry,用 cpolar 打通错误上报链路
python·nginx·docker·cpolar·sentry
MrSYJ2 天前
别人再问你路由表是啥,这篇文章摔它脸上
docker·云原生·kubernetes