錄播教程 怎樣制作彈幕版錄播?(1.普通彈幕篇)
本文根據(jù)我和朋友們的探索寫成,可能過于啰嗦并存在錯誤或者未解決問題,敬請見諒。如果各指出文章中的問題并提供解決方法,我會修改文章改正錯誤,請大家不吝賜教!
更多相關(guān)內(nèi)容,請點擊:那個啥和那個啥的錄播組教程- 文集

省流版:
1.用錄播軟件(本文為錄播姬)錄制帶xml的直播視頻,提前下載好彈幕轉(zhuǎn)換工具(本文為DanmakuFactory)和ffmpeg
3-1.源幀率源分辨率壓制:shanaencoder或者消極壓制(這是個軟件名,不是行為描述)
3-2.或者提高幀率和分辨率壓制:在地址欄打開cmd,或者用批處理輸入.\ffmpeg.exe -hwaccel auto -c:v h264_qsv -y -hide_banner -i 例子.flv -vf fps=fps=60,scale=1920:1080,subtitles=例子.ass -preset veryfast -b:v 5000k -vcodec h264_qsv -c:a aac -b:a 320k 輸出.mkv
壓制彈幕
回復(fù)“TD”退訂

下面為詳細步驟:
需要用到的軟件
能下載彈幕的直播錄制軟件(本文以彈幕姬為例)
彈幕轉(zhuǎn)換軟件(本文以DanmakuFactory為例)
ffmpeg
彈幕姬的設(shè)置
下載彈幕姬并且安裝,填寫錄制房間號(不知道的房間號的打開網(wǎng)頁端直播間,網(wǎng)址最后面的數(shù)字就是房間號),點擊左側(cè)齒輪按鈕,打開“彈幕錄制”,為保證視頻不斷,選擇“不自動分段”,其他參數(shù)自定義。
注:錄制模式中,標準模式可以自動修復(fù)時間軸錯亂的錄播,建議開啟,不必和圖中完全一致。

錄制完成且不出意外的話,我們非常容易的獲得一個flv視頻文件和xml彈幕文件。(如果出現(xiàn)不止一個視頻,可能是網(wǎng)絡(luò)波動導(dǎo)致視頻斷開,建議參考專欄cv11284495修復(fù),再合并,合并教程見cv13929485)

拿到兩個文件后,將xml文件轉(zhuǎn)換為ass彈幕文件方便調(diào)整樣式,所以我們打開DanmakuFactory。

DanmakuFactory的注意事項
首次使用DanmakuFactory請點擊彈幕設(shè)置進行設(shè)置,需要注意的是,1.62版本之前的部分版本存在彈幕轉(zhuǎn)換后亂碼,請下載最新版本使用。彈幕設(shè)置中,請關(guān)閉畫面設(shè)置中的“統(tǒng)計圖”“直方圖”。
完成彈幕設(shè)置后,點擊“打開文件”輸入xml,點擊“轉(zhuǎn)換”,出現(xiàn)以下窗口即為轉(zhuǎn)換成功,有需要的用aegisub進行修改,請用文本軟件刪除unknown錯誤,刪除后aegisub才能正常打開ass文件。不需要修改的直接把ass文件名重命名成視頻名一致即可看效果。


補充:刪除ass文件中的unknown行(沒有修改需要的可酌情跳過,跳轉(zhuǎn)至“補充結(jié)束”)
用DanmakuFactory轉(zhuǎn)換為ass字幕文件,遇到第一個絆腳石,Aegisub打不開這個字幕文件。

PlanA:用Sublime Text打開發(fā)現(xiàn)有大量的unknown語句(沒有Sublime Text不要急,慢慢看)

使用Sublime Text的正則表達式功能進行替換,替換Comment: NO.*:unknow type
為空

替換完成后效果如下圖,保存后可以正常打開。

正常打開

PlanB:沒有Sublime Text或者不會正則表達式的,這么做:設(shè)置打開方式為記事本,Ctrl+A全選文本,復(fù)制,粘貼到Excel中

選中該列,啟用“篩選”功能,篩選內(nèi)容為“comment”

選中第一個comment,用Ctrl+Shift+方向下 組合鍵,選中所有的comment,右鍵-刪除-整行,關(guān)閉篩選功能。

Ctrl+A全選表格內(nèi)所有內(nèi)容,復(fù)制到記事本內(nèi)保存,這樣也可以打開。
補充結(jié)束

進入關(guān)鍵環(huán)節(jié),彈幕壓制。

收到視頻文件和ass文件之后,有一部分用戶會想到使用小丸工具箱進行壓制,這是一種方法,但速度過于緩慢不推薦用來制作長時間的彈幕版錄播。本文將著重介紹使用ffmpeg的顯卡壓制制作彈幕視頻,并進行彈幕分辨率(不是視頻分辨率)和彈幕幀率(不是視頻補幀)的提升。

當然,可視化的操作更適合大部分使用者,ShanaEncoder、消極壓制、XMedia Recode均可以調(diào)用顯卡進行壓制,可移步至cv14214321的壓制部分,使用XMedia Recode進行高幀率彈幕壓制。

如果不需要提高幀率和分辨率,那就直接用shanaencoder或者消極壓制吧。這兩個上手簡單,設(shè)好壓制參數(shù)后把同名視頻和參數(shù)一拖。
另外不知道什么原因,shanaencoder壓出的彈幕版錄播很容易糊,請注意這個問題。建議各位在正式壓制前,先截取一到兩分鐘進行試驗。


打開網(wǎng)址?http://ffmpeg.org/?點擊“download”進入ffmpeg下載界面。

Windows 用戶點擊相應(yīng)圖標,并點擊比較長的鏈接進入下一個頁面。

找到ffmpeg-git-full.7z,單擊下載獲得一個壓縮包,把這個壓縮包內(nèi)的ffmpeg.exe放置到能記住的位置,有能力的人請在網(wǎng)上自行以“ffmpeg 環(huán)境變量”為關(guān)鍵詞設(shè)置環(huán)境變量。

所有需要的文件和軟件準備完畢,進入彈幕壓制環(huán)節(jié)。

這里會分情況進行講解說明,彈幕壓制基本語法會基于下面這一行代碼進行擴展。
ffmpeg -i?輸入視頻路徑?-vf subtitles=彈幕.ass -vcodec h264_qsv -c:a aac -b:a 320k?輸出視頻路徑
為什么輸出設(shè)為mkv格式?因為如果設(shè)置成mp4格式,只能等壓制完成后才能看到壓制效果,中間如果彈幕文件亂碼,浪費的時間不能接受,設(shè)置為mkv格式是為了在壓制的同時可以看到效果,一旦發(fā)現(xiàn)任何錯誤都可以停下重新設(shè)置。
第一步,打開cmd指令。
不建議win+R,輸入cmd打開cmd進行壓制,因為這樣的話彈幕.ass要加的斜杠太多啦,譬如本文這樣的環(huán)境,應(yīng)該在cmd輸入的代碼是這樣的。
"D:\例子\ffmpeg.exe" -i "D:\例子\例子.flv" -vf subtitles=\'D:/例子/例子.ass\' -vcodec h264_qsv -c:a aac -b:a 320k "D:\例子\out.mkv"
如果在前文設(shè)置了環(huán)境變量,"D:\例子\ffmpeg.exe"可以簡單替換為ffmpeg(后文將全部以ffmpeg使用,請沒設(shè)置環(huán)境變量的讀者自行替換成ffmpeg.exe所在的路徑)
推薦的兩種方法:
第一種:直接在地址欄輸入“cmd”并敲擊回車,彈出cmd窗口。


這樣的話我們只需要簡單輸入
ffmpeg -i 例子.flv -vf subtitles=例子.ass -vcodec h264_qsv -c:a aac -b:a 320k out.mkv
敲擊回車開始壓制。
第二種方法,批處理命令
在該目錄下右鍵鼠標,新建“文本檔案”,雙擊打開文本檔案,輸入ffmpeg -i 例子.flv -vf subtitles=例子.ass -vcodec h264_qsv -c:a aac -b:a 320k out.mkv


點擊“另存為”,保存類型為“所有文件”,文件名為“xxx.bat”,編碼為“ANSI”

雙擊bat文件開始壓制。
在介紹完基本框架之后,根據(jù)筆者英特爾CPU帶核顯,無英偉達顯卡的硬件條件,完整的代碼是這樣的:
ffmpeg -hwaccel auto -c:v h264_qsv -y -hide_banner -i 例子.flv -vf fps=fps=60,scale=1920:1080,subtitles=例子.ass -preset veryfast -b:v 5000k -vcodec h264_qsv -c:a aac -b:a 320k 輸出.mkv
特點是快,畫質(zhì)會差很多?,F(xiàn)在一點一點解析:
ffmpeg?
作用與前文"D:\例子\ffmpeg.exe"
相同,表明ffmpeg.exe的位置-hwaccel auto?
啟用硬件解碼器,N卡用戶可以改成-hwaccel cuvid
可以將解碼的幀保存在顯存里(可能有用,筆者沒有N卡無法驗證)-c:v h264_qsv?
使用h264_qsv為硬件解碼器,N卡用戶可改為-c:v h264_cuvid(可能有用,筆者沒有N卡無法驗證)
-y?
(不影響質(zhì)量)覆蓋輸出文件而不詢問-hide_banner?
(不影響質(zhì)量)輸出文件的詳細信息時省略 ffmpeg 的版本信息和編譯選項等-i 例子.flv?
輸入視頻的路徑-vf fps=fps=60,scale=1920:1080,subtitles=例子.ass?
(重要)設(shè)定彈幕幀率為60幀,彈幕分辨率為1080P,彈幕文件為例子.ass。并不能提升源視頻的幀率和分辨率,后面會詳細講解這條代碼的作用-preset veryfast?
使用CPU壓制的話,-preset可選值: ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow,placebo。編碼速度越慢編出來的越清晰,顯卡壓制最快一檔為veryfast,我們選用顯卡壓制速度放在第一位-b:v 5000k?
設(shè)置視頻碼率為5000K,不使用-qscale:v
是為了防止最終視頻超過16G無法上傳-vcodec h264_qsv?
設(shè)置h264_qsv為硬件編碼器,N卡用戶可改為-c:v h264_nvenc(確定可用)
-c:a aac -b:a 320k?
設(shè)置音頻格式為acc,音頻碼率為320
現(xiàn)在著重講解?-vf fps=fps=60,scale=1920:1080,subtitles=例子.ass?
的作用
假如你錄制的直播間主播推流的分辨率和幀率都極低,我們?nèi)∫粋€極端的情況,600x360的分辨率,1fps,相當于是用門鎖拍的,眨眼補幀??粗辈サ臅r候我們只會覺得視頻卡,彈幕不卡。直播結(jié)束后,你直接使用了?-vf subtitles=例子.ass?
播放壓制完成的視頻就會覺得彈幕又糊又卡。

ffmpeg里的ass濾鏡默認是按照原視頻的分辨率渲染的,全屏播放就顯得非常模糊。為了提升彈幕版的觀看體驗,我們需要指定ass的幀率和分辨率,這樣才能得到高清流暢的彈幕版。
在實際的運用過程中,部分主播還是以720P25幀的質(zhì)量推流,如果使用默認參數(shù),會覺得彈幕模糊且卡頓影響觀看體驗,我通常會將彈幕版錄播處理成1080P60幀的質(zhì)量。B站的最高畫質(zhì)為4K120幀,如果你電腦性能夠強愿意折騰也可以嘗試一下。

最后進行步驟總結(jié):
用錄播軟件(本文為錄播姬)錄制帶xml的直播視頻,提前下載好彈幕轉(zhuǎn)換工具(本文為DanmakuFactory)和ffmpeg
直播結(jié)束后用彈幕轉(zhuǎn)換工具轉(zhuǎn)換xml為ass文件
如果用源幀率源分辨率壓制,使用軟件shanaencoder或者消極壓制。如果要提升幀率和分辨率壓制彈幕,用ffmpeg或者XMediaRecode壓制。

一個沒能解決的問題:
使用ffmpeg壓制彈幕,有些符號和小丸壓制的成品顯示不一樣,譬如中文的破折號,在小丸壓制的視頻是一條長線,ffmpeg是兩條長線,有些打call彈幕帶有特殊符號,同樣是黑體的情況下ffmpeg不能正常顯示,變成方框,小丸可以正常顯示。請問有沒有方法可以讓ffmpeg的壓制的字幕顯示和小丸一樣?
下一篇教程針對B站推出的新版直播間表情包,講解怎樣壓制帶表情包的彈幕版視頻(過于繁瑣不實用,看看就好)
