修復音訊滯後的 m4v 視訊(音訊和視訊不同步)

修復音訊滯後的 m4v 視訊(音訊和視訊不同步)

這是 Windows 的類似問題:

修復視訊與音訊不同步的工具?

我希望在 Mac 上解決這個問題。

我嘗試過 Handbrake 和 Avidemux(後者似乎有一個選項——“shift”——來修復它,但它根本不播放音頻,所以我不知道它是否在做任何事情!)。

答案1

為自己找一份 FFmpeg 的副本。請參閱本文底部以了解如何執行此操作。

無論視訊落後於音訊還是反之亦然,這並不重要。基本命令如下。我們將傳遞輸入兩次,如兩個選項所示-i,然後延遲一個輸入,並將它們合併在一起。

ffmpeg -i in.flv -itsoffset offset -i in.flv -map 1:0 -map 0:1 -c copy out.flv

這裡,offset是以秒為單位的延遲,例如1.50.35。該值必須為正,因此如果您的音頻落後於視頻,我們將不得不抵消視頻。這如上面的範例所示。同樣,如果視頻落後於音頻,我們就必須抵消音頻。

那麼,如何選擇延遲音訊或視訊呢?好吧,由於我們已經延遲了整個過程in.flv,我們只需選擇音訊或視訊串流並將它們與原始音訊或視訊串流合併。這是在-map選項中完成的。

基本上,map有兩個數字。冒號前的第一個數字指定輸入檔編號(從0開始),第二個數字指定輸入檔流(也從0開始)。

因此,要延遲音頻,請使用以下兩個選項:

  • -map 1:0意思是:從第二個輸入檔中取得第一個串流,(來自原始檔案的影片)
  • -map 0:1意思是:從第一個輸入檔中取得第二個串流(來自延遲檔的音訊)

如果您必須延遲視訊播放,請將其扭轉:

  • -map 0:0意思是:從第一個輸入檔中取得第一個串流(來自延遲檔的影片)
  • -map 1:1意思是:從第二個輸入檔中取得第二個串流(來自原始檔案的音訊)

最後-c copy將簡單告訴 FFmpeg 複製視訊和音訊位元流。這意味著不會有編碼過程。這使得命令變得超快,並且您甚至不會在此過程中失去任何品質。但是,如果您遇到同步錯誤,那麼您應該忽略-c copy並讓 FFmpeg 重新編碼輸入。


您可以透過以下方式取得最新穩定的 FFmpeg 版本自製

  • 打開終端機並輸入:

      ruby -e "$(curl -fsSkL raw.github.com/mxcl/homebrew/go)"
    
  • 請參閱安裝要求以及。如果尚未安裝,則必須安裝 Xcode 命令列工具。為此,您需要一個 Apple ID。

  • 安裝 Homebrew 後,安裝 FFmpeg:

      brew install ffmpeg
    
  • 完成後,我們可以使用 FFmpeg 修復您的影片。

相關內容