在我們存儲(chǔ)視頻文件的時(shí)候通常會(huì)有變更編碼格式以滿足各臺(tái)設(shè)備都能解碼播放,或者在我們能接受的范圍內(nèi)壓縮碼率來節(jié)約空間,又或者將所有視頻統(tǒng)一儲(chǔ)存為mp4格式或者說是蘋果友好的m4v格式。

這里舉一個(gè)例子,比如說我這里的原視頻我認(rèn)為自己用不上這么高的質(zhì)量,所以我設(shè)置了用NVENC(英偉達(dá)顯卡編碼器)下質(zhì)量參數(shù)為cq25來進(jìn)行轉(zhuǎn)碼,這里轉(zhuǎn)了H264-8bit色彩,H265-8bit色彩,H265-10bit色彩三種,方便大家對(duì)比一下實(shí)際大小,AV1格式NVENC轉(zhuǎn)出來的大小有點(diǎn)奇怪,所以沒有放在這里,理論上應(yīng)該是最小的。當(dāng)然轉(zhuǎn)成什么編碼格式還是看你的播放端能不能放,并不是說H264就一定最差,AV1就最好,你沒看油管要全面推開AV1格式來節(jié)約帶寬和流量不是罵聲一片,另外H265商用的話可能還要注意他的收費(fèi)問題。

All in one(十)Handbrake自動(dòng)轉(zhuǎn)碼存儲(chǔ)轉(zhuǎn)碼后文件大小示意

而轉(zhuǎn)碼當(dāng)然最為簡(jiǎn)潔而且功能強(qiáng)大的辦法是直接使用ffmpeg,但是這是一個(gè)命令行工具,對(duì)大家使用來說不是那么的友好,所以說我們準(zhǔn)備選擇一款有圖形化界面的工具。這里選用的是handbrake,其實(shí)底層轉(zhuǎn)碼功能實(shí)現(xiàn)依然還是基于ffmpeg。

handbrake本身支持在windows/linux/mac上進(jìn)行安裝,但是并沒有提供docker版本。在你的主力機(jī)上安的好處是由于硬件性能較強(qiáng)編解碼速度較快,劣勢(shì)就是編解碼還是會(huì)占用相當(dāng)多的系統(tǒng)資源,基本上你在轉(zhuǎn)碼的時(shí)候放在前臺(tái)他會(huì)平均的吃每一個(gè)核心以及顯卡的編碼能力,后臺(tái)的話Intel的大小核結(jié)構(gòu)會(huì)被windows調(diào)度到小核上面,如果這個(gè)時(shí)候前臺(tái)玩游戲的話因?yàn)轱@卡一部分資源被handbrake占用了,所以說幀數(shù)會(huì)下降。拿出以前的老圖來示意一下,幀數(shù)下降是博德3從160幀占不滿顯卡下降到135幀左右,如果說是吃CPU的前臺(tái)任務(wù)那么估計(jì)就會(huì)比較吃力了。

All in one(十)Handbrake自動(dòng)轉(zhuǎn)碼存儲(chǔ)前臺(tái)運(yùn)行handbrake
All in one(十)Handbrake自動(dòng)轉(zhuǎn)碼存儲(chǔ)后臺(tái)運(yùn)行handbrake,轉(zhuǎn)碼速度減半
All in one(十)Handbrake自動(dòng)轉(zhuǎn)碼存儲(chǔ)后臺(tái)運(yùn)行handbrake同時(shí)打游戲

如果說是急用的話,當(dāng)然還是主力機(jī)轉(zhuǎn)碼來的快很多,但是如果不急的話,我們就可以把相關(guān)轉(zhuǎn)碼服務(wù)放到All in one主機(jī)上來,畢竟反正也是常開,全力運(yùn)行功耗也就多個(gè)20W,還可以不影響我們主力機(jī)的其他任務(wù)。

一、Docker部署handbrake

由于linux直接安裝需要圖形界面,我們也不想再去安裝一臺(tái)有圖形界面的虛擬機(jī),所以直接找了一個(gè)開源的docker版本來部署,這個(gè)docker版本有webui,可以設(shè)置自動(dòng)任務(wù),相對(duì)而言功能還是挺實(shí)用的。項(xiàng)目地址如下:

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

這是項(xiàng)目作者的示例yml文檔,就是一個(gè)簡(jiǎn)單的端口和目錄映射,其中storage這個(gè)目錄是只讀,用來手動(dòng)選擇文件轉(zhuǎn)碼的;其他的是讀寫權(quán)限。因?yàn)閛utput是輸出轉(zhuǎn)碼后文件的目錄,watch目錄是自動(dòng)轉(zhuǎn)碼的監(jiān)視目錄,像我設(shè)置了不保留源文件他也需要?jiǎng)h除文件的寫權(quán)限。

All in one(十)Handbrake自動(dòng)轉(zhuǎn)碼存儲(chǔ)作者示例文檔

另外還有一大堆的環(huán)境變量,當(dāng)然作者示例文檔里面并沒有加入那一堆環(huán)境變量參數(shù),詳細(xì)的可以參考項(xiàng)目github里面的描述,我只挑幾個(gè)出來說一說

LANG 語言,可以設(shè)置為中文,但是需要安裝或者導(dǎo)入字體,不然就是亂碼

ENABLE_CJK_FONT 設(shè)置為1則會(huì)安裝開源字體,但是吧網(wǎng)絡(luò)堪憂,還是自己導(dǎo)入靠譜

TZ 時(shí)區(qū),直接設(shè)置為上海

AUTOMATED_CONVERSION 是否自動(dòng)轉(zhuǎn)碼,默認(rèn)為1,關(guān)閉改為=0

AUTOMATED_CONVERSION_PRESET 使用的自動(dòng)轉(zhuǎn)碼預(yù)設(shè)值,默認(rèn)是General/Very Fast 1080p30這個(gè)預(yù)設(shè)

AUTOMATED_CONVERSION_FORMAT 自動(dòng)轉(zhuǎn)碼最終封裝的格式,默認(rèn)MP4

AUTOMATED_CONVERSION_KEEP_SOURCE 自動(dòng)轉(zhuǎn)碼完成后是否保留源文件,默認(rèn)為1,如果要?jiǎng)h除就是0

WEB_AUTHENTICATION 是否在網(wǎng)頁上進(jìn)行身份驗(yàn)證,默認(rèn)為0,如果需要要寫一行=1

WEB_AUTHENTICATION_USERNAME 網(wǎng)頁端用戶名

WEB_AUTHENTICATION_PASSWORD 網(wǎng)頁端密碼

在docker目錄下新建一個(gè)handbrake目錄來管理這個(gè)容器,然后handbrake目錄內(nèi)再新建config目錄來映射存放配置文件,再新建一個(gè)fonts目錄來存放字體。

以下是我的一個(gè)最終示例yml文檔,修改了以下一些內(nèi)容

映射了一個(gè)字體目錄直接導(dǎo)入字體不用讓容器去下載

由于轉(zhuǎn)碼真的可以把CPU跑滿,我又是給了跑docker的lxc容器跟物理機(jī)一樣的核心數(shù),所以這里限制了一下handbrake可以調(diào)用的核心數(shù),不然真的會(huì)導(dǎo)致整個(gè)all in one死機(jī)。

環(huán)境變量里面語言和時(shí)區(qū)不多說。自動(dòng)轉(zhuǎn)碼這個(gè)部分根據(jù)你自己的需求來設(shè)置,需要注意的preset的名字你要記住,等會(huì)兒保存預(yù)設(shè)的時(shí)候要用這個(gè)名字。然后就是讓我們的docker能夠調(diào)用核顯,設(shè)置了用戶和用戶組,以及映射了設(shè)備。如果沒有核顯就不用這些,CPU也能編解碼,無非就是慢點(diǎn)而已。

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進(jìn)入handbrake目錄內(nèi)運(yùn)行docker compose up -d,運(yùn)行之后我們打開docker的lxc容器ip:你映射的端口,就可以打開網(wǎng)頁端了,長(zhǎng)這個(gè)樣子。

All in one(十)Handbrake自動(dòng)轉(zhuǎn)碼存儲(chǔ)界面

二、調(diào)整預(yù)設(shè)

由于目前還是英文版,所以先說說設(shè)置預(yù)設(shè),等會(huì)還要調(diào)到中文來。

首先點(diǎn)擊左上角文件選擇首選項(xiàng),主要是修改一下MP4輸出的格式是否為對(duì)蘋果友好變成m4v,看你自己選擇,我沒有蘋果所以取消了。

All in one(十)Handbrake自動(dòng)轉(zhuǎn)碼存儲(chǔ)圖片

然后回到下方,摘要欄需要選擇的是封裝格式,有MP4,mkv和webm三種,這里mp4可以選擇網(wǎng)頁優(yōu)化,音視頻起始對(duì)齊,對(duì)老機(jī)器ipod的支持以及是否直通通用元數(shù)據(jù),一般默認(rèn)他的選擇就行。mkv和webm就只有直通元數(shù)據(jù)這一個(gè)選擇了,看你的需求,后續(xù)自動(dòng)轉(zhuǎn)碼如果不要MP4還需要你添加一條環(huán)境變量,因?yàn)樽詣?dòng)轉(zhuǎn)碼默認(rèn)是MP4。

下一個(gè)選項(xiàng)是尺寸,主要注意一下分辨率限制那里,如果你選了限制那么他會(huì)限制輸出的最大分辨率。

All in one(十)Handbrake自動(dòng)轉(zhuǎn)碼存儲(chǔ)圖片

然后是濾鏡,同樣是中英文對(duì)比,我不太懂這些濾鏡所以使用的是默認(rèn)

All in one(十)Handbrake自動(dòng)轉(zhuǎn)碼存儲(chǔ)圖片

最重要的是video視頻部分,主要就是四個(gè)部分的設(shè)置,選擇編碼器,AV1的SVT和另外兩個(gè)編碼的x26x是用CPU,qsv是使用核顯,主要就是選你的編碼格式以及編碼器到底是CPU還是某個(gè)GPU。幀率我一般就選與原視頻相同然后可變幀率。質(zhì)量可以調(diào)節(jié)RF(CPU)、ICQ(顯卡)的值,越朝右邊質(zhì)量越高,但是如果原視頻質(zhì)量本來就不算好調(diào)高了也沒啥意義。或者你可以選擇bitrate直接固定碼率也行。最后是編碼器預(yù)設(shè),建議就拖動(dòng)那個(gè)藍(lán)條就行了,藍(lán)條是選擇壓縮效率和編碼效率的折中,選擇fast之類的最終壓縮效率就會(huì)低點(diǎn)輸出視頻就會(huì)大些但是快點(diǎn),選擇quality之類的輸出就會(huì)慢點(diǎn)但是最終輸出文件稍微小點(diǎn),我一般balanced。如果是核顯編碼更多設(shè)置里面可以加一條lowpower=0,但是其實(shí)好像首選項(xiàng)里面也設(shè)置了編碼時(shí)禁用節(jié)能選項(xiàng),不過設(shè)置了也沒有沖突。

All in one(十)Handbrake自動(dòng)轉(zhuǎn)碼存儲(chǔ)圖片

后面音頻字幕章節(jié)標(biāo)簽因?yàn)樯婕暗骄唧w視頻具體操作,我們自動(dòng)轉(zhuǎn)碼用不太上,所以就沒有設(shè)置了。

設(shè)置完成之后點(diǎn)擊這里的保存為新預(yù)設(shè)

All in one(十)Handbrake自動(dòng)轉(zhuǎn)碼存儲(chǔ)圖片

取一個(gè)名字,這里就取成了auto;描述description刪不刪除隨意,你也可以選擇保存為默認(rèn)預(yù)設(shè)

All in one(十)Handbrake自動(dòng)轉(zhuǎn)碼存儲(chǔ)圖片

然后我們這個(gè)預(yù)設(shè)就是General/auto,也就是之前那個(gè)yml文檔里面的自動(dòng)轉(zhuǎn)碼預(yù)設(shè)名字。這個(gè)時(shí)候你就可以測(cè)試將視頻放入watch目錄映射的目錄內(nèi)看自動(dòng)轉(zhuǎn)碼是否可以運(yùn)行了。

至此handbrake的部署和基礎(chǔ)使用就說完,下一篇來說說局域網(wǎng)網(wǎng)速測(cè)試等等一些小工具。

作者聲明本文無利益相關(guān),歡迎值友理性交流,和諧討論~

,

聲明:本站所有文章,如無特殊說明或標(biāo)注,均為本站原創(chuàng)發(fā)布。任何個(gè)人或組織,在未征得本站同意時(shí),禁止復(fù)制、盜用、采集、發(fā)布本站內(nèi)容到任何網(wǎng)站、書籍等各類媒體平臺(tái)。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進(jìn)行處理。