2017-02-23 107 views
2

我在使用FFmpeg編碼時遇到問題。 我有一個音頻文件aac mp4。我試圖用ffmpeg複製音頻。 在源mp4文件中,第一個音頻噪聲出現在0.30秒。 使用ffmpeg -i inputfile.mp4 -c:a copy outputfile.aac轉換後,生成的文件錯誤,第一個音頻噪聲出現在0.32秒。 文件的持續時間也不相同。ffmpeg AAC轉換後的錯誤音頻文件

當我強制編碼器到libfaac,它的工作原理,但文件太大。

那麼,爲什麼在使用默認編碼器時不起作用(aac,libfdk_aac)? 請注意,同樣的事情出現時,我從大膽轉換。

非常感謝

回答

3

有其由所述解碼器,以所述第一幀進行解碼所需的音頻流中的填充幀。這是AAC等MDCT音頻編解碼器的技術要求。在像MP4/MKV這樣的定時樣本容器中,該第一幀具有負面的呈現時間戳。在原始AAC比特流中,該第一幀被天真解碼。每幀有1024個樣本,所以有21-23毫秒的持續時間。您的時間差異是由於該偏移。重新包裝到像M4A這樣的容器來避免這種情況。

對於背景,從Apple

AAC需要以正確 編碼和解碼由於 編碼算法的性質音頻樣本超出源PCM音頻樣本數據。 AAC編碼使用對連續的 組的2048個音頻樣本進行變換,應用每1024個音頻樣本 (重疊)。爲了正確解碼音頻,需要1024個音頻樣本的任何 週期的變換。由於這個原因,編碼器在第一個「真實」音頻採樣 之前至少添加了1024個靜音樣本,並且通常會添加更多。這被稱爲各種「啓動」,「啓動 樣本」或「編碼器延遲」。

缺乏用於編碼器的延遲和剩餘 樣品顯式表示的不是唯一的AAC編碼的問題。使用MPEG-4和 ADTS/MPEG-2比特流和文件容器,對於編碼器延遲或剩餘樣本,仍然沒有滿意的顯式表示。 MP3也具有這些數據依賴性和 其比特流中的延遲,就像AC-3等專有編解碼器一樣。