如何用OBS實現(xiàn)(原理上的)無損錄屏? #1
今天介紹第一種方法:X264?CRF0?yuv444p
無損錄制的視頻要想發(fā)出去肯定得二次壓縮,畢竟沒有設(shè)備可以硬解。但其實今天這種方法錄下來的視頻,用FFmpeg?CLI重新封裝成MP4就可以直傳B站,至少yuv420p的我試過可以。反正你自己壓縮了B站也要再壓一次,不如直接給B站服務(wù)器吐源碼,我之前就說過要充分相信現(xiàn)在B站的視頻服務(wù)器。
假設(shè)OBS是剛建立了一個新預(yù)設(shè)文件的狀態(tài)。打開設(shè)置。

1.?切換到"輸出"選項卡;
2.?將"輸出模式"切換到"高級"。

3.?切換到"錄像"選項卡,單獨設(shè)置錄制參數(shù)。
4.?可以更改默認的保存路徑。
5.?建議勾選"生成沒有空格的文件名",因為帶空格的文件名在命令行參數(shù)里需要加引號。也可以在"高級->錄像->文件名格式"中自定義文件名。

6.?確認"錄像格式"為"mkv"或者"ts"。默認值為"mkv"。不要選擇"mp4"和"mov",因為MTS流和MKV都是可以中斷的,而MP4和MOV不能,如果錄制意外停止就悲劇了。
7.?選擇"編碼器"為"x264"。需要注意的是,以我掌握的情況,目前Intel?QSV和NVENC都不支持無損編碼。但是實際上Intel?QSV支持類似CRF的固定質(zhì)量編碼方式,稱為"ICQ",并且可以在OBS中使用,我正在探索如何在FFmpeg中使用它。不過它不是今天的重點。

8.?選擇"碼率控制方式"為CRF。
9.?修改CRF的值為0,默認值是23,CRF=23也是FFmpeg中X264的缺省編碼方式。在X264?8Bit下CRF=0代表進行無損編碼,無論采樣數(shù)多少,X264都會自動選擇profile=HI444P,因為只有HI444P這一種profile支持CRF=0的無損編碼。
10.?選擇"CPU使用預(yù)設(shè)"(也就是preset)為ultrafast。反正肯定要進行二次壓縮,而且無損編碼加快編碼速度不會影響質(zhì)量,第一次編碼時就可以盡量節(jié)省CPU資源。

11.?切換到"視頻"選項卡。
12.?設(shè)置"基礎(chǔ)(畫布)分辨率"和屏幕分辨率一致;
13. 設(shè)置"輸出(縮放)分辨率"和屏幕分辨率一致。貌似在設(shè)置了畫布分辨率后,輸出分辨的下拉菜單中的分辨率會自動和畫布分辨率比例保持一致。

14.?可以修改"縮小方法"為"雙直線法",因為實際上不需要縮放。(問一下各位,OBS有沒有檢測到畫布和輸出分辨率一致就關(guān)閉縮放算法的邏輯,懶得看源碼了)(看了也看不懂,不會C++)
15.?設(shè)置FPS值和屏幕刷新率一致。

16.?切換到"高級"選項卡。
17.?選擇"顏色格式"為"I444"。雖然X264實際上已經(jīng)支持了RGB編碼,但是實測在這里選擇了"RGB"后,輸出的視頻是yuv420p的。

18.?選擇"色彩空間"為"709";
19.?選擇"色彩范圍"為"全部"。這是根據(jù)常識判斷的結(jié)果(PC正常情況下應(yīng)該是sRGB/ITU709?0-255)。但是據(jù)我實測,好像這兩個選項怎么選都沒有區(qū)別。。各位有知道怎么回事的可以說一下。
20.?點擊"應(yīng)用"保存更改。

關(guān)閉設(shè)置窗口,添加一個"顯示器捕獲"即可開始錄屏。
下次可能會講FFmpeg直接出無壓縮RGB流,不過那樣碼率就很可怕了。今天這種方法至少碼率在可控范圍內(nèi),而且一般軟件操作類的視頻這樣錄碼率也很低。
圖片是用PS做的,做得比較辛苦。。