對齊聲音和影像不同步的現場錄影 - 以DJI Osmo Pocket為例

3月 16, 2019
Hello 大家好我是Denny!

拉釦子樂團最近添購了DJI Osmo Pocket這台錄影機用來記錄現場的演出,我在處理混音的時候發現這台機器的產生的錄影檔案存在聲音落後影像的狀況,雖然非常輕微(大約晚0.1秒,後詳),但對我來說已經會干擾到我看演出錄影聽音樂的流暢感覺了,特別是在看鼓手打手鈸的時候(對董胖我是你的大粉絲!!)。

這篇文章的目的便是要說明這個問題,和如何使用自動化的程式批次把落後的聲音往前拉,如果你在錄製現場演出的時候也遇到相同的情況,也可以使用相同的方式處理,不限定只適用於DJI的錄影機。

以下進入正題!

以我從拉釦子拿到的錄影為例,原始的毛片片段是這樣的。


看起來沒什麼大問題對吧?!是的,完成混音的片段是這樣。


可以聽到聲音已經好很多,那麼前面提到的時間軸的問題是什麼?

我在檢查音軌放回錄影的時間軸的時候發現,聲音好像微微落後影像,雖然很輕微,但已經會讓我出戲,特別是我看到cajon和手鈸的時候。如果把錄影放到錄影編輯軟體裡面,就會發現聲音落後影像大約3個frame (@ 29.976 fps)。

我們以上面這個樣本的第12秒的最後一個手鈸為例,在時間軸上可以看到畫面出現鼓手董胖打下手鈸的時間點是左邊的紅線(畫面見上方預覽畫面的左邊),然而如果再檢視時間軸下半的聲音波形圖,就會發現那個手鈸的聲音大約晚了3個frame才出現。


如此可以由 3 frames @ 29.976 fps 計算出實際上聲音落後影像的時間為:
1000 ms / 29.976 * 3 frames = 100.08 ms = 0.1 second

所以我重新跑ffmpeg把音軌放回的批次命令,但這次我修改參數讓時間提前0.1秒,重新處理過後的錄影片段如下。


我不知道大家是不是都能夠感受到這樣些微的差異,但對我來說對齊聲音和影像以後的錄影我看起來是流暢很多,儘管時間上的差異可能真的很小(曾經的鼓手表示...)。

同樣把影片放入編輯軟體,可以看到第12秒的手鈸影像和聲音起始的時間誤差在1個frame之內(< 33 ms)。


拉釦子除了使用DJI Osmo Pocket以外,同一個時間也使用Sony C900記錄現場演出,而C900的聲音落後影像的延遲穩定在小於1個frame的時間,基本上算很準確。(但Sony C900有另外一個自動分段點會多出0.576秒的問題,請見另一篇文)

好的,說完問題在哪裡,接下來要說明怎麼解決。以下說明的解決方式適用任何錄影影音不同步的狀況,不限DJI的機器。

解決的方法其實也很直觀,是使用曾經在我過去寫過的一篇文章裡面出現過的ffmpeg命令式,在放回音軌的時候加入時間延遲的參數來達到把音軌提前的效果。

例如:
ffmpeg -i input.mts -itsoffset -0.1 -i input.wav -map 0:0 -map 1:0 -c:v copy -c:a ac3 -b:a 256k new_video.mts


其中input.mts是原始錄影的檔名,input.wav是要替換進原始錄影的聲音檔,new_video.mts是新產生檔案的檔名,-itsoffset -0.1則是告訴ffmpeg在放入音軌的時候把聲音"延後"-0.1秒(也就是"提前"0.1秒)。

那麼如果你並沒有要另外混音的計畫,該如何處理呢?

可以用以下指令直接在影片檔案內移動聲音軌道在時間軸上的位置

ffmpeg -i input.mts -itsoffset -0.1 -i input.mts -map 0:v -map 1:a -c copy new_video.mts

以上指令都不會對影像重新編碼,可以省下在一般編輯軟體修正後運算的時間。

ffmpeg支援Windows, Mac OS, Linux等系統,我很久以前寫過一篇使用ffmpeg批次取出和放回錄影的文章,裡面有提到基本如何使用ffmpeg的作法 - 如何快速替換錄影檔案中的聲音

時過境遷,我後來寫了一個小小的程式方便我批次處理音軌從錄影裡面取出和放回,我就有把處理DJI的聲音落後和Sony C900錄影斷點聲音延後的問題的解決方式寫進去,由程式自動處理,有興趣的話也可以直接下載這支小程式來校正你的錄影。

沒有留言:

技術提供:Blogger.