剪輯雜談(1)——格式奇怪的錄播
這一系列將記錄我接單過程中遇到的一些奇怪或好玩的問題,并嘗試對這些問題產(chǎn)生的原因進行分析,而后給出可行的解決辦法。
早在去年10月,就有很多切片man反應(yīng)說用錄播姬錄制的錄播導(dǎo)入剪輯軟件后存在音畫不同步的現(xiàn)象,當(dāng)時我也檢查了一些錄播,發(fā)現(xiàn)均存在VFR(動態(tài)幀速率)的問題,盡管Pr在早些版本中就更新了對VFR的支持,但實際剪輯時仍會音畫不同步。
直播姬并不支持VFR推流,只能選擇CFR(固定幀速率),OBS也在早些版本的公告中說取消了對VFR的支持;既然推流端不存在問題,那只可能是平臺串流端采用了VFR,懷疑是為了減輕服務(wù)器壓力。但我對于流媒體傳輸并不熟悉,也不清楚將CFR換為VFR能降低多少成本。
對于VFR轉(zhuǎn)CFR,我的辦法是在ffmpeg轉(zhuǎn)碼過程中中加入?yún)?shù)"-vsync cfr",盡管可能會損失流暢度,但盡可能保證了剪輯過程中的音畫同步。在視頻不長及顯卡性能強的情況下,可以考慮在轉(zhuǎn)碼中選擇略低于動態(tài)平均幀速率的幀速率,并使用SVFI等AI補幀軟件進行補幀。
如VFR60.01可以直接轉(zhuǎn)為CFR60,而VFR59.95可以考慮轉(zhuǎn)為CFR50再補至60。
而非整數(shù)幀速率,同時Pr識別為VFR的,并不意味著視頻一定就是VFR的,還有可能是由時間碼錯誤或不同步引起的。時間碼不同步通常是因為OBS推流和錄制編碼采用的時間碼邏輯與剪輯軟件采用的時間碼邏輯并不相同。當(dāng)然,這一問題也可以采用上述的辦法解決。
前文提到OBS在早些版本的公告中說明了取消對VFR的支持,但是在錄制透明底視頻的過程中,即采用png編碼時,偶爾會出現(xiàn)VFR問題;此外,在png編碼下錄制多音軌視頻時,偶爾會出現(xiàn)多音軌時間碼不同步的問題。在OBS官方論壇詢問無果,只得到了“現(xiàn)版本OBS不可能錄制出VFR”的答案。起初我懷疑仍然是時間碼問題導(dǎo)致的視頻被識別為VFR,而非真的VFR,但查閱了OBS關(guān)于時間碼部分的源碼后,仍未得到解答,至今原因不明。問題可能出在OBS調(diào)用的ffmpeg包上,但這方面我尚不熟悉。由于我遇到的透明底錄制時多為無聲而后期配音,故音畫不同步問題可以忽略。
最近遇到的錄播封裝格式為QuickTime/MOV,編碼格式為Prores422,音頻為雙聲道但只有左聲道有聲音,VFR29.97,顏色格式為YUV422,色彩空間為sRGB。很明顯,這應(yīng)當(dāng)是來自蘋果相關(guān)設(shè)備的錄播,29.97也是Prores422下常見的幀速率,Pr識別為VFR應(yīng)當(dāng)為時間碼不同步導(dǎo)致,而雙聲道只有單側(cè)有聲應(yīng)當(dāng)為麥克風(fēng)輸入設(shè)置錯誤。
解決流程如下:
提取視頻并重新編碼,但將Prores轉(zhuǎn)碼為幀間h264時提示不支持cuda加速,只好采用CPU編碼,保險起見啟用“-vsync cfr”參數(shù),CFR25,碼率10mkps;(現(xiàn)在想來完全可以CFR30)
提取音頻為wav格式,將左聲道復(fù)制到右聲道,為了制造差異稍加一點混響;
將音視頻合并,并用SVFI補幀到CFR30(CFR60)。
以上為這段時間的經(jīng)驗和問題總結(jié)。