如何做到短視頻錄制同步?

短視頻錄制基本流程

短視頻錄制基本流程

同步的重要性

“BGM和人聲對(duì)不齊”,“BGM和嘴型對(duì)不齊”等等,同步問(wèn)題是用戶(hù)最容易感受到的,也是一個(gè)深度短視頻錄制者非常看重的;同時(shí),由于兼容性和產(chǎn)品功能的多樣性,比如seek、跳過(guò)前奏、原唱伴唱切換等等,非常容易出現(xiàn)且難以察覺(jué),甚至難以解決。下面我們就來(lái)分析,是什么導(dǎo)致不同步的問(wèn)題,以及如何解決。

問(wèn)題分析

我們常見(jiàn)的短視頻錄制的場(chǎng)景,以及要做的到的同步問(wèn)題

純音頻錄制(音頻K歌)

????主要是伴奏和人聲的同步

單視頻錄制(視頻K歌、短視頻錄制)

????主要是伴奏和人聲、錄制視頻同步,進(jìn)一步分解為伴奏和人聲的同步,和伴奏和視頻的同步。

多視頻錄制 (視頻合唱、視頻跟拍)

????主要是錄制視頻、跟拍視頻、伴奏和人聲同步,進(jìn)一步分解為伴奏和人聲的同步,伴奏和視頻的同 步,和錄制視頻和跟拍視頻的同步。

因此我們將短視頻錄制的同步問(wèn)題,分解為以下三個(gè)問(wèn)題,并一一分析和解決。

1、BGM和人聲的同步

2、BGM和視頻的同步

3、錄制視頻和跟拍視頻的同步

問(wèn)題解決

BGM和人聲的同步

同步非常難以解決的一個(gè)原因是很難直接量化,所以第一步我們要去量化它。

我們使用每隔兩秒滴一下的音頻作為BGM,打開(kāi)外放,這樣滴的聲音又會(huì)被重錄進(jìn)app中,這樣BGM滴的聲音的位置和重錄進(jìn)去滴一聲的位置的差,就是不同步時(shí)間差,一般要求

音視頻實(shí)驗(yàn)室:-100ms ~ 100ms

能夠量化后,接著我們要做到的是以下兩步:

1)保證寫(xiě)到本地的BGM和人聲數(shù)據(jù)量相同

2)保證BGM和人聲沒(méi)有錯(cuò)位

1、保證寫(xiě)到本地的BGM和人聲數(shù)據(jù)量相同

有兩方面,一方面是保證幀數(shù)相同,另一方面要保證bgm和人聲的pcm的采樣率相同,為后續(xù)混音,seek,裁剪等處理做準(zhǔn)備。

保證幀數(shù)相同業(yè)界有兩種方案:

1)輸入一幀(錄入)人聲,輸出一幀(播放)BGM。實(shí)現(xiàn)的方式比如說(shuō)IOS本身的AudioQueue和 Android類(lèi)似的實(shí)現(xiàn)oboe,都是通過(guò)一個(gè)線程去保證輸入一幀(錄入)音頻,輸出一幀(播放)音頻。

2)Android系統(tǒng)實(shí)現(xiàn)中,錄制器和解碼器是維護(hù)在不同線程中的,如何在兩個(gè)線程(錄制線程、解碼線程)中,保證BGM和人聲數(shù)據(jù)量相同。我們?cè)诮獯a器中維護(hù)了一個(gè)queue,里面緩存了解碼出來(lái)的音頻幀。解碼一幀音頻,放入queue中一幀;錄制出一幀音頻,從queue中取出一幀音頻。

保證采樣率相同,需要我們?cè)贐GM解碼后和錄制出數(shù)據(jù)后,增加重采樣的步驟。

2、錄制的人聲和BGM沒(méi)有錯(cuò)位

有以下原因會(huì)導(dǎo)致人聲和BGM錯(cuò)位

1)錄音器的輸入延遲和播放器的輸出延遲

人聲的錄入需要經(jīng)過(guò)以下階段:一段BGM先經(jīng)過(guò)播放器播放,人聽(tīng)到并同步的唱出,經(jīng)過(guò)錄制器,回到app中。

因此人聲的時(shí)間點(diǎn)與對(duì)應(yīng)的BGM的時(shí)間點(diǎn),必然是落后錄音器的輸入延遲 + 播放器的輸出延遲

因此我們需要開(kāi)始錄制時(shí)裁減掉開(kāi)始部分人聲,同時(shí)在錄制結(jié)束時(shí),用空數(shù)據(jù)補(bǔ)全缺少的人聲。

2)解碼速度如果低于錄制速度,就會(huì)導(dǎo)致BGM播放卡頓以及堵塞錄制線程。

錄制的輸入速度由硬件層保證,一定是輸出的數(shù)據(jù)量代表的錄制間隔(所以有的時(shí)候可以直接根據(jù)絕對(duì)時(shí)間變化,計(jì)算錄制pts)

解碼速度如何保證大于或者等于錄制的輸入速度呢?一方面及時(shí)是m4a的音頻的解碼速度一般也是快于20ms/幀的,另一方面更建議使用直接使用pcm。pcm可以是直接下載到或者在準(zhǔn)備過(guò)程中預(yù)解碼得到的。

同時(shí)如果使用pcm的話(huà),會(huì)使得seek變得更加精準(zhǔn)且快,但同時(shí)帶來(lái)交互上的成本或者下載成本。

3)warmup 音頻預(yù)熱

分input音頻預(yù)熱和output音頻預(yù)熱,難點(diǎn)在于app開(kāi)發(fā)者無(wú)法直接獲得,且不同設(shè)備差距很大。

針對(duì)這種情況,有一種方案是在線下通過(guò)之前介紹測(cè)量環(huán)路延遲的方法,測(cè)量top機(jī)型的整個(gè)環(huán)路延遲,在錄制過(guò)程中,根據(jù)測(cè)量的環(huán)路延遲,丟棄人聲的音頻幀。

但是這種方案并不能覆蓋所有機(jī)型,同時(shí)需要很大的成本去維護(hù)環(huán)路延遲機(jī)型表,所以我建議采取的手段可以是

通過(guò)假暫停減少多次音頻預(yù)熱出現(xiàn)

由于音頻預(yù)熱比較小,可以在對(duì)開(kāi)始錄制的地方,忽略音頻預(yù)熱

4)seek不精準(zhǔn)

使用精準(zhǔn)seek或者直接使用pcm數(shù)據(jù)

5)解碼器緩存和播放器緩存

在重新開(kāi)始錄制時(shí),要記得清楚解碼器緩存和播放器緩存,避免解碼器緩存和播放器緩存導(dǎo)致多余的BGM播放導(dǎo)致,錄制時(shí)間滯后BGM播放時(shí)間

事實(shí)上還有最后的兜底方案,也是業(yè)界內(nèi)比較常用的,就是在預(yù)覽頁(yè)允許用戶(hù)根據(jù)微調(diào)人聲和

最后,我們發(fā)現(xiàn)BGM和人聲的同步校準(zhǔn),并不是采用根據(jù)時(shí)間戳去校準(zhǔn),反而是嚴(yán)格保證音頻幀數(shù)據(jù)量一致且沒(méi)有錯(cuò)位來(lái)校準(zhǔn),這是由于人耳對(duì)音頻的敏感性,錄制中不能有丟幀。

BGM和視頻的同步

非常重要,但是也比較通用,大體有三個(gè)方案:

三種方案比較

由于對(duì)聲音連續(xù)的要求高,所以基本不會(huì)考慮方案B。

錄制視頻和跟拍視頻的同步

目前有兩種方案:

方案一:

1、預(yù)覽時(shí),播放和錄制相互不影響;左邊播放原視頻,右邊播放camera返回的視頻。

2、合成時(shí),根據(jù)pts分別從原視頻和錄制視頻中,取出pts對(duì)應(yīng)的視頻幀,再合并在一起。

方案二:

1、預(yù)覽時(shí),從原視頻按照錄制的pts取對(duì)應(yīng)的視頻幀,和錄制的視頻幀,先一起繪制在一個(gè)framebuffer上,再展示在屏幕上和經(jīng)過(guò)編碼寫(xiě)到文件中。

2、無(wú)合成過(guò)程。

方案比較

因此在短視頻錄制場(chǎng)景,建議優(yōu)先使用方案二。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 教程一:視頻截圖(Tutorial 01: Making Screencaps) 首先我們需要了解視頻文件的一些基...
    90后的思維閱讀 4,762評(píng)論 0 3
  • 前言:每個(gè)成功者多是站在巨人的肩膀上!在做直播開(kāi)發(fā)時(shí) 碰到了很多問(wèn)題,在收集了許多人博客的基礎(chǔ)上做出來(lái)了成功的直播...
    IM魂影閱讀 1,999評(píng)論 1 12
  • 上一篇我們侃侃而談了下Android下的App音視頻開(kāi)發(fā)雜談,我們從入手到深入再到實(shí)際項(xiàng)目的遇到的問(wèn)題以及解決方案...
    耗子_wo閱讀 1,847評(píng)論 0 3
  • 肖亞玲今年二十六歲,結(jié)婚三年,生有一個(gè)兒子。肖亞玲也算是個(gè)很勤懇的持家女人,晚上在市場(chǎng)旁邊熱鬧大街?jǐn)[地?cái)傎u(mài)成衣,白...
    和風(fēng)輕和閱讀 344評(píng)論 3 1
  • 每逢我自認(rèn)為足夠理智足夠淡然的時(shí)候,其實(shí)都還有著許多未知的不確定因素困擾著我.我已失眠好幾個(gè)夜晚,對(duì)外宣稱(chēng)是自己對(duì)...
    萌小灰閱讀 146評(píng)論 0 0