在我们存储视频文件的时候通常会有变更编码格式以满足各台设备都能解码播放,或者在我们能接受的范围内压缩码率来节约空间,又或者将所有视频统一储存为mp4格式或者说是苹果友好的m4v格式。

这里举一个例子,比如说我这里的原视频我认为自己用不上这么高的质量,所以我设置了用NVENC(英伟达显卡编码器)下质量参数为cq25来进行转码,这里转了H264-8bit色彩,H265-8bit色彩,H265-10bit色彩三种,方便大家对比一下实际大小,AV1格式NVENC转出来的大小有点奇怪,所以没有放在这里,理论上应该是最小的。当然转成什么编码格式还是看你的播放端能不能放,并不是说H264就一定最差,AV1就最好,你没看油管要全面推开AV1格式来节约带宽和流量不是骂声一片,另外H265商用的话可能还要注意他的收费问题。

All in one(十)Handbrake自动转码存储转码后文件大小示意

而转码当然最为简洁而且功能强大的办法是直接使用ffmpeg,但是这是一个命令行工具,对大家使用来说不是那么的友好,所以说我们准备选择一款有图形化界面的工具。这里选用的是handbrake,其实底层转码功能实现依然还是基于ffmpeg。

handbrake本身支持在windows/linux/mac上进行安装,但是并没有提供docker版本。在你的主力机上安的好处是由于硬件性能较强编解码速度较快,劣势就是编解码还是会占用相当多的系统资源,基本上你在转码的时候放在前台他会平均的吃每一个核心以及显卡的编码能力,后台的话Intel的大小核结构会被windows调度到小核上面,如果这个时候前台玩游戏的话因为显卡一部分资源被handbrake占用了,所以说帧数会下降。拿出以前的老图来示意一下,帧数下降是博德3从160帧占不满显卡下降到135帧左右,如果说是吃CPU的前台任务那么估计就会比较吃力了。

All in one(十)Handbrake自动转码存储前台运行handbrake
All in one(十)Handbrake自动转码存储后台运行handbrake,转码速度减半
All in one(十)Handbrake自动转码存储后台运行handbrake同时打游戏

如果说是急用的话,当然还是主力机转码来的快很多,但是如果不急的话,我们就可以把相关转码服务放到All in one主机上来,毕竟反正也是常开,全力运行功耗也就多个20W,还可以不影响我们主力机的其他任务。

一、Docker部署handbrake

由于linux直接安装需要图形界面,我们也不想再去安装一台有图形界面的虚拟机,所以直接找了一个开源的docker版本来部署,这个docker版本有webui,可以设置自动任务,相对而言功能还是挺实用的。项目地址如下:

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

这是项目作者的示例yml文档,就是一个简单的端口和目录映射,其中storage这个目录是只读,用来手动选择文件转码的;其他的是读写权限。因为output是输出转码后文件的目录,watch目录是自动转码的监视目录,像我设置了不保留源文件他也需要删除文件的写权限。

All in one(十)Handbrake自动转码存储作者示例文档

另外还有一大堆的环境变量,当然作者示例文档里面并没有加入那一堆环境变量参数,详细的可以参考项目github里面的描述,我只挑几个出来说一说

LANG 语言,可以设置为中文,但是需要安装或者导入字体,不然就是乱码

ENABLE_CJK_FONT 设置为1则会安装开源字体,但是吧网络堪忧,还是自己导入靠谱

TZ 时区,直接设置为上海

AUTOMATED_CONVERSION 是否自动转码,默认为1,关闭改为=0

AUTOMATED_CONVERSION_PRESET 使用的自动转码预设值,默认是General/Very Fast 1080p30这个预设

AUTOMATED_CONVERSION_FORMAT 自动转码最终封装的格式,默认MP4

AUTOMATED_CONVERSION_KEEP_SOURCE 自动转码完成后是否保留源文件,默认为1,如果要删除就是0

WEB_AUTHENTICATION 是否在网页上进行身份验证,默认为0,如果需要要写一行=1

WEB_AUTHENTICATION_USERNAME 网页端用户名

WEB_AUTHENTICATION_PASSWORD 网页端密码

在docker目录下新建一个handbrake目录来管理这个容器,然后handbrake目录内再新建config目录来映射存放配置文件,再新建一个fonts目录来存放字体。

以下是我的一个最终示例yml文档,修改了以下一些内容

映射了一个字体目录直接导入字体不用让容器去下载

由于转码真的可以把CPU跑满,我又是给了跑docker的lxc容器跟物理机一样的核心数,所以这里限制了一下handbrake可以调用的核心数,不然真的会导致整个all in one死机。

环境变量里面语言和时区不多说。自动转码这个部分根据你自己的需求来设置,需要注意的preset的名字你要记住,等会儿保存预设的时候要用这个名字。然后就是让我们的docker能够调用核显,设置了用户和用户组,以及映射了设备。如果没有核显就不用这些,CPU也能编解码,无非就是慢点而已。

services:

handbrake:

container_name: handbrake

image: jlesage/handbrake:latest

ports:

- "29651:5800"

cpus: 4.0

volumes:

- "./config:/config"

- "./fonts:/usr/share/fonts"

- "/mnt/nfs1/xldownloads:/storage:ro"

- "/mnt/nfs1/sourse:/watch:rw"

- "/mnt/nfs1/output:/output:rw"

environment:

- "LANG=zh_CN.UTF-8"

- "TZ=Asia/Shanghai"

- "AUTOMATED_CONVERSION=1"

- "AUTOMATED_CONVERSION_KEEP_SOURCE=0"

- "AUTOMATED_CONVERSION_PRESET=General/auto"

- "USER_ID=0"

- "GROUP_ID=0"

devices:

- /dev/dri/card0:/dev/dri/card0

- /dev/dri/renderD128:/dev/dri/renderD128

restart: always

ssh进入handbrake目录内运行docker compose up -d,运行之后我们打开docker的lxc容器ip:你映射的端口,就可以打开网页端了,长这个样子。

All in one(十)Handbrake自动转码存储界面

二、调整预设

由于目前还是英文版,所以先说说设置预设,等会还要调到中文来。

首先点击左上角文件选择首选项,主要是修改一下MP4输出的格式是否为对苹果友好变成m4v,看你自己选择,我没有苹果所以取消了。

All in one(十)Handbrake自动转码存储图片

然后回到下方,摘要栏需要选择的是封装格式,有MP4,mkv和webm三种,这里mp4可以选择网页优化,音视频起始对齐,对老机器ipod的支持以及是否直通通用元数据,一般默认他的选择就行。mkv和webm就只有直通元数据这一个选择了,看你的需求,后续自动转码如果不要MP4还需要你添加一条环境变量,因为自动转码默认是MP4。

下一个选项是尺寸,主要注意一下分辨率限制那里,如果你选了限制那么他会限制输出的最大分辨率。

All in one(十)Handbrake自动转码存储图片

然后是滤镜,同样是中英文对比,我不太懂这些滤镜所以使用的是默认

All in one(十)Handbrake自动转码存储图片

最重要的是video视频部分,主要就是四个部分的设置,选择编码器,AV1的SVT和另外两个编码的x26x是用CPU,qsv是使用核显,主要就是选你的编码格式以及编码器到底是CPU还是某个GPU。帧率我一般就选与原视频相同然后可变帧率。质量可以调节RF(CPU)、ICQ(显卡)的值,越朝右边质量越高,但是如果原视频质量本来就不算好调高了也没啥意义。或者你可以选择bitrate直接固定码率也行。最后是编码器预设,建议就拖动那个蓝条就行了,蓝条是选择压缩效率和编码效率的折中,选择fast之类的最终压缩效率就会低点输出视频就会大些但是快点,选择quality之类的输出就会慢点但是最终输出文件稍微小点,我一般balanced。如果是核显编码更多设置里面可以加一条lowpower=0,但是其实好像首选项里面也设置了编码时禁用节能选项,不过设置了也没有冲突。

All in one(十)Handbrake自动转码存储图片

后面音频字幕章节标签因为涉及到具体视频具体操作,我们自动转码用不太上,所以就没有设置了。

设置完成之后点击这里的保存为新预设

All in one(十)Handbrake自动转码存储图片

取一个名字,这里就取成了auto;描述description删不删除随意,你也可以选择保存为默认预设

All in one(十)Handbrake自动转码存储图片

然后我们这个预设就是General/auto,也就是之前那个yml文档里面的自动转码预设名字。这个时候你就可以测试将视频放入watch目录映射的目录内看自动转码是否可以运行了。

至此handbrake的部署和基础使用就说完,下一篇来说说局域网网速测试等等一些小工具。

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

,

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。