
這是 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.5
或0.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 修復您的影片。