在升級到最新的 Ubuntu 之前,我使用以下命令從 avi 檔案中提取 mp3:
$ for x in *.avi; do ffmpeg -vol 100 -ab 160k -ar 44100 -i "$x" "`basename "$x" .avi`.mp3"; done
這有效。但自從 Ubuntu 12.04 我得到未找到選項sample_rate。當我嘗試執行這個命令時。如果我省略-ar 44100(或-sample_rate 44100)它確實提取了mp3,但在大多數情況下,提取的mp3的長度不再適合。這意味著它們的長度為 43 分鐘左右,儘管 avi 的長度只有 5 分鐘。
ffmpeg 和 avconv 都有相同的問題。有什麼想法如何解決這些問題嗎?
答案1
試著用這個代替:
ffmpeg -i "$x" -vol 100 -ab 160k -ar 44100 "`basename "$x" .avi`.mp3"
之前選項位於輸入檔前面,但看起來您想為輸出檔設定它們。
答案2
您是否嘗試過使用其他 avi 檔案?文件的音軌可能比視頻軌道長(只是猜測)。
您嘗試過 -t 選項嗎?
-t duration
Restrict the transcoded/captured video sequence to the duration
specified in seconds. "hh:mm:ss[.xxx]" syntax is also supported.
您可能想嘗試在 ffmpeg 中設定音訊位元流過濾器。我從未嘗試過,但“remove_extra”過濾器聽起來很有希望;)
-absf bitstream_filter
Bitstream filters available are "dump_extra", "remove_extra",
"noise", "mp3comp", "mp3decomp".
您是否考慮過使用像 ExifTool 這樣的命令來查看有關文件的資訊並相應地設定選項(甚至可能解析輸出並在腳本中自動執行)?
也許您可以以無損格式提取音訊文件,然後對音訊檔案進行轉碼,但必須有比這更好的方法。
如果您解決了問題,請發布您所做的事情,因為我對處理我需要解復用的 1000 個視訊檔案的明顯方法不滿意。我製作了一個與您類似的腳本,但是我希望在不浪費任何空間的情況下獲得盡可能最佳品質的音訊檔案。我的轉碼選項肯定是動態的,所以我需要比單行更複雜的東西。
答案3
ffmpeg -version 將告訴您在為 Ubuntu 12.04 編譯 ffmpeg 時啟用了哪些建置選項。您可能缺少一個庫,或者可能在建置期間未啟用某個選項,您必須在啟用任何停用選項的情況下重新編譯。 ffmpeg 的預設取樣率為 44100,位元率為 64k。
答案4
從 ppa:jon-severinsson/ffmpeg 安裝 ffmpeg 的 ppa,這將修復它。