關(guān)于我如何在一個小時內(nèi)發(fā)布版本音樂視頻

本文旨在分享個人優(yōu)化原神版本音樂視頻發(fā)布流程的一些想法和實踐
根據(jù)網(wǎng)上現(xiàn)有的工具一般來說發(fā)布游戲音樂的發(fā)布流程為:
下載游戲包體或更新包
解壓相關(guān)文件
解包音頻
導(dǎo)入進視頻編輯器
生成視頻
上傳視頻
采用這種手工方式不僅有大量的重復(fù)操作,還要忍受漫長的視頻編解碼過程。如果新地圖一開或者大版本更新,則會花費數(shù)小時進行操作(以1.0版本為例,500多首我花費了半天才搞定)。
為了節(jié)省我寶貴時間的同時加快音樂的處理,我決定采用python腳本加速投稿流程。核心步驟分為獲取音頻和生成視頻。

下載游戲包體或更新包
首先是資源包獲取,一般來說需要下載完整的更新包才能拿到新版本音樂。
但是好像在2.2版本后啟動器引入了一個資源修復(fù)機制,當(dāng)啟動器發(fā)現(xiàn)有文件損壞或者缺失時它會從獲取資源的API中拿到一個叫“解壓目錄”的網(wǎng)址,其下的http目錄結(jié)構(gòu)和游戲根目錄的完全一樣,從而啟動器可以選擇性的下載對應(yīng)的文件。這時候我只需要通過這個API獲取新版本需要下載的音樂文件即可。


解包音頻
原神音頻解包采用的是Wwise的FilePackage格式,我一共用過兩個軟件,quickBMS和Ravioli Game Tools。前者支持命令行操作,后者專門對FilePackage解析做了適配,可以導(dǎo)出bnk,而且?guī)в蠭D(但解析不了語音包,似乎是適配問題),還可以配合ww2ogg將vorbis編碼格式的wem文件轉(zhuǎn)換為ogg,但是似乎不支持命令行。兩種軟件都不能滿足我對音頻解包的需求,通過分析Wwise SDK的代碼我自己寫了個解包腳本(現(xiàn)已上傳至GitHub:https://github.com/BUnipendix/WwiseFilePackager)。
(FilePackage的結(jié)構(gòu)分析我就不寫了)
FilePackage里所有音頻的文件信息都寫在了文件頭里(包括ID、語言、文件類型、位置、大?。┒Z言下相同的文件都有相同的ID,所以只需要下載文件頭,讀取里的ID、文件大小和位置,就可以在不完全下載音樂包的情況下快速確定和下載新音樂和修改過的音樂(當(dāng)然只是ID變的音樂還是無法避免的被誤下載,這種情況我在下載后增加了一個校驗步驟,生成指紋和本地文件的進行對比,從而盡量避免這種情況發(fā)生)

生成視頻
生成視頻這種運算量過大的操作我準(zhǔn)備交給大名鼎鼎的ffmpeg。一開始我準(zhǔn)備使用音頻可視化,但是這種要么無法接入python,要么速度奇慢。最后我選擇了靜態(tài)圖片和循環(huán)視頻作為生成視頻的模板,因為這種視頻因為畫面固定,所以我可以通過“預(yù)編碼”來節(jié)省時間:靜態(tài)圖片先需要生成3-5秒的視頻,再輸入ffmpeg,“stream_loop”參數(shù)將其拼接成無限循環(huán)的視頻輸入,"-c:v copy"參數(shù)讓ffmpeg拷貝視頻流而不會二次編碼,大大提高了視頻生成速度,最后用-t參數(shù)控制視頻長度與音頻一致,防止視頻無限生成下去。
視頻的生成通過python直接在下載轉(zhuǎn)換完成后執(zhí)行,最大化利用時間
3.2版本后:我準(zhǔn)備使用先行介紹頁的spine動畫,但是因為魔改加入物理的緣故既無法導(dǎo)入專門的軟件渲染,也無法形成循環(huán)動畫,所以我用了個取巧的方法:錄制大約4分鐘的動畫(用的obs里的游覽器,用調(diào)試器去掉了UI),直接傳入之前的循環(huán)視頻解決方案,因為“-t”的存在,ffmpeg會根據(jù)關(guān)鍵幀在不二次編碼的情況下裁切視頻,當(dāng)音頻長度超過視頻也只會有一瞬的銜接痕跡,基本無感。

視頻上傳
自從阿b關(guān)閉了網(wǎng)頁多P上傳通道,我一直尋找上傳多P的方法:
官方客戶端雖然可以上傳多P,但是只支持一次拖拽一個文件,上傳速度還不穩(wěn)定,經(jīng)??ㄗ?,并且一次最多只能上傳100個分P。
自己根據(jù)biliup-rc的邏輯寫的python版,準(zhǔn)備完全放開雙手,但是穩(wěn)定性很差,動不動上傳錯誤,而且因為API的緣故,一次只能上傳一個視頻。
biliup-rc本身命令行打字耗時,而且必須在上傳完成前確定文字內(nèi)容
biliup-rc的GUI版biliup-app支持多文件拖拽上傳,可以隨時修改稿件,但是功能沒有網(wǎng)頁豐富,無法查看推薦tag
最終我用了biliup-rc的GUI版biliup-app

總結(jié)
優(yōu)化后的流程的最耗時間的反而是上傳視頻。以3.6版本為例,經(jīng)測試,除去上傳視頻總共只耗時2分鐘,而視頻上傳則花了10分多鐘。

腳本日志開頭
