FFmpeg

簡介與其他資料:
  http://www.mobile01.com/topicdetail.php?f=510&t=3734550

其他範例:
  http://www.mobile01.com/topicdetail.php?f=510&t=4487462


參考資料

FFmpeg 官網:
  https://trac.ffmpeg.org/wiki/Encode/AAC


簡介

Advanced Audio Coding (AAC) 是 MP3 的後繼格式,它被定義於 MPEG-4 part 3 (ISO/IEC 14496-3)。它通常使用在 MP4 容器內;對於音樂習慣上使用 .m4a 副檔名。第二常見使用是在 MKV (Matroska) 檔內,因為它比 MP4 支援更多以文字為基礎的軟字幕 (例如 ass, ssa...)。本文中的範例將使用 MP4 與 M4A 副檔名。

FFmpeg 可以支援 4 個 AAC-LC 編碼器 (aac, libfaac, libfdk_aac, libvo_aacenc) 與兩個 AAC-HE 編碼器 (libaacplus, libfdk_aac)。libaacplus, libfaac, libfdk_aac 的授權不與 GPL 相容,所以當 GPU 授權原始碼也包含在內時 GPU 不允許包含原始碼授權依據這些授權的二進位檔的發布。因此這些編碼器被指定為 "non-free",且你不能下載內建它們的 ffmpeg。這可以透過自行編譯 ffmpeg 來解決。

Non-free FFmpeg 自動建置腳本:
  ‧media-autobuild_suite

對於 AAC-LC 品質而言,其答案可能是:
Native FFmpeg AAC encoder (aac) >= libfdk_aac > libfaac > libvo_aacenc
※ '>=' 代表 '大於或等於'。

https://trac.ffmpeg.org/wiki/Encode/HighQualityAudio#AudioencodersFFmpegcanuse


Bitrate

雙聲道推薦 位元率 >= 128kbps.

多聲道推薦位元率:
推薦位元率 >= 雙聲道推薦位元率 * 聲道數 / 2

由以上得知, 6 聲道則推薦位元率 >= 128kbps * 6 / 2 = 384kbps


libfdk_aac

The Fraunhofer FDK AAC 編解碼程式庫,這是目前 ffmpeg 所能提供的最高品質 AAC 編碼器。需要 ffmpeg 組態 (configuration) 中含有 --enable-libfdk-aac (如果也使用 --enable-gpl 則還需要 --enable-nonfree)。

詳細資料: Fraunhofer FDK AAC - Hydrogenaud


Constant Bit Rate (CBR, 常數位元速率) 模式

指定一個目標位元速率。它可以讓你精準控制輸出檔案大小 (= 位元率 * 時間長度),且它與 HE-AAC profile 相容。

範例:

轉換一個音訊檔為 AAC 並以 M4A (MP4) 容器來封裝:
ffmpeg -i input.wav -c:a libfdk_aac -b:a 128k output.m4a

轉換一個影片的 5.1 生到音訊為 AAC,並複製其視訊串流:
ffmpeg -i input.mp4 -c:v copy -c:a libfdk_aac -b:a 384k output.mp4


Variable Bit Rate (VBR, 可變位元速率) 模式

指定一個目標品質,而不是特定的位元速率。設定值範圍為 1-5,較高的值會得到較高的位元率與品質。使用 -vbr 選項來設定 VBR 等級。

範例:

轉換一個音訊檔為 AAC 並以 M4A (MP4) 容器來封裝:
ffmpeg -i input.wav -c:a libfdk_aac -vbr 3 output.m4a

轉換一個影片的 5.1 生到音訊為 AAC,並複製其視訊串流:
ffmpeg -i input.mp4 -c:v copy -c:a libfdk_aac -vbr 3 output.mp4


High-Efficiency AAC

簡稱 AAC-HE 又名為 aacPlus,這是一對專門針對低位元速率的 AAC profiles (version 1 與 version 2),AAC-HE v1。對於雙聲道而言 ,AAC-HE v1 適用於 64kbps 以下,而 AAC-HE v2 適用於 32kbps 以下。但大多數播放設備不支援播放任何版本的 AAC-HE 而只能播放 AAC-LC。

注意: AAC-HE v2 只能支援雙聲道。對於單聲道,則使用 AAC-HE v1。

如果需要指定 Profile 則使用 -profile 選項。

Profiles:
aac_low
  MPEG-4 AAC LC (default)
aac_he
  MPEG-4 HE-AAC (SBR)
aac_he_v2
  MPEG-4 HE-AAC v2 (SBR+PS)
aac_ld
  MPEG-4 AAC LD
aac_eld
  MPEG-4 AAC ELD

例如:
ffmpeg -i input.wav -ac 2 -c:a libfdk_aac -profile:a aac_he -vbr 3 output.m4a


Native FFmpeg AAC encoder

原生 (Native) FFmpeg AAC 編碼器,這是目前 ffmpeg 所能提供的第二高品質 AAC 編碼器。而且它已包含在 ffmpeg 內,不像本文中其它 AAC 編碼器那樣需要一個外部程式庫。在 128kbps 位元速率通常可以產生與 libfdk_aac 相同甚至更高的品質,但在 96kbps 以下偶爾聽起來會比較差。這是預設的 AAC 編碼器。缺點是此編碼器還不支援 AAC-HE profile.

指定位元率

使用 -b 選項來指定輸出位元率為 160kbps:
ffmpeg -i input.wav -c:a aac -b:a 160k output.m4a

指定品質

使用 -q 選項來指定輸出品質等級為 6:
ffmpeg -i input.wav -strict experimental -c:a aac -q:a 6 output.m4a

設定值有效範圍為 0.1-10。比較高的設定值會得到較高的輸出品質與位元率大小。
此 VBR 是實驗性的並且有可能得到比 CBR 更差的結果。
[2015/12/06] ffmpeg git 版已改進原生 AAC 編碼器
不再需要使用實驗旗標 (VBR 模式依舊需要)
在 128kbps 位元速率通常可以產生與 libfdk_aac 相同甚至更高的品質
但目前還不支援 AAC-HE profile.

kingdragon wrote:
[2015/12/0...(恕刪)


K大的意思是說

現在用aac 的品質與 libfdk_acc 的品質一樣好,甚致更好。。。
且現在用aac時不用再加 -strict -2 這個參數

我這樣理解錯吧????

ps.另發覺最近從官網下的ffmpeg,不再需要fonts這個目錄了耶?!
(K大的dropbox版 包libfdk_aac 的44MB 的ffmpeg 還是需要fonts目錄,不知k大能否再更新一版 ^^)
笑看風雲 wrote:
現在用aac 的品質與 libfdk_aac 的品質一樣好,甚致更好。。。

只限於輸出都是 AAC LC 且輸出位元率設定值大於 96kbps 時
所以當要輸出 96kbps 以下的音訊,還是推薦用 libfdk_aac

笑看風雲 wrote:
且現在用aac時不用再加 -strict -2 這個參數

如果你要使用 VBR 模式 (-q 品質)還是需要實驗旗標
ffmpeg -i input.wav -strict -2 -c:a aac -q:a 6 output.m4a

但 VBR 因為尚在實驗階段,所以可能得到比 CBR 更差的結果...

kingdragon wrote:
FFmpeg簡介與其...(恕刪)


在網上查過好像沒類似的範例,還是想請教k大確認一下。。
(只有看過其它命令工具的範例)

Q:有嵌入專輯封面的flac,mp3,m4a檔案,作轉檔時,是否能連同封面一併轉換???

笑看風雲 wrote:
有嵌入專輯封面的flac,mp3,m4a檔案,作轉檔時,是否能連同封面一併轉換???

如果是要將封面轉為一個視訊串流,使用 -c:v 指定編碼器即可
ffmpeg -input.flac -c:v libx264 -crf 18 -c:a aac -b:a 256k output.mp4

如果要輸出帶封面的音訊檔,ffmpeg 目前只有 MP3 格式支援
http://unix.stackexchange.com/questions/84915/add-album-art-cover-to-mp3-ogg-file-from-command-line-in-batch-mode

如果是 M4A 格式可以使用 mp4box 插入封面
ffmpeg -i input.flac -c:a aac music.m4a
ffmpeg -i input.flac -c:v copy cover.jpg
mp4box -itags cover=cover.jpg music.m4a

http://stackoverflow.com/questions/17798709/ffmpeg-how-to-embed-cover-art-image-to-m4a
試著用1512211版本的FFmpeg轉了一個帶封面的flac檔(封面是用Mp3tag加入的),封面可以被FFmpeg自動帶入到輸出的m4a檔內,檔案總管下也可以看到m4a的縮圖,但是回到Mp3tag下卻看不到該m4a檔的封面,此外,千千靜聽可以播這個m4a檔,但是MPC-HC x64卻不能播/封面也秀不出來,照經驗這個m4a檔在我車上也會因此而播放不出來。

如果用Mp3tag先把flac檔的封面移掉,轉出來不帶封面的m4a檔就可以用MPC-HC x64播放了,再用Mp3tag把封面從原flac檔copy-paste加入到這個m4a檔,MPC-HC x64也可以連封面一起正確播放....

使用的參數如下,依k大提供的FFmpeg官網說明,似乎新版已可以不用下 "-c:a aac" 參數了?

ffmpeg -i <input.flac> -b:a 320k <output.m4a>
Whistle Blow wrote:
封面可以被FFmpeg自動帶入到輸出的m4a檔內

其實封面圖片是被轉成影片 (Video stream) 輸出了......
可以用 -vn 避免此問題,然後再用其他工具插入封面圖片

Whistle Blow wrote:
似乎新版已可以不用下 "-c:a aac" 參數了?

如果沒有指定編碼器,ffmpeg 會自動依照副檔名呼叫合適的編碼器
例如 mp4 檔案格式可封裝 h.264 或 h.265
輸出檔案的副檔名如果是 mp4,則 ffmpeg 會優先使用 libx264
如果要使用 libx265 就必須使用 -c:v libx265 來強制指定
FFmpeg 官網修改了 AAC 編碼器的說明
原生 FFmpeg AAC 編碼器變成第二高品質 AAC 編碼器...
FDK-AAC 變回了第一
特地登入回覆表達敝人的感謝
正好有一批AAC音訊檔需要截短後重新用AAC編碼
之前foobar2000怎麼試都失敗
終於在此找到答案

目前還有一批DTS lossy音訊檔需要截短後重新用DTS編碼
但查過似乎未開源估計沒機會了 於是放棄改用FLAC lossless編碼
樓主大的文章資訊含量豐富得驚人
佩服您的奉獻精神
關閉廣告
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!