2014-02-12 33 views
0

我想轉換一個MP3音頻文件與FFMPEG AAC文件,並且我需要將音頻包裹在MPEG-2容器中。 所得AAC文件需要AAC-LC(低複雜性),1通道,CBR模式,44100採樣率,和48KB/s的比特率,所以使用此命令:轉換MP3到AAC與MPEG-2容器(FFMPEG)

ffmpeg -y -i input.mp3 -ar 44100 -ab 48k -acodec libfdk_aac -ac 1 output.aac 

但是,當我檢查ADTS標題,音頻文件總是被封裝在MPEG-4容器中。我已經嘗試了這裏列出的所有編解碼器,但我仍然以一個纏繞音頻的mpeg-4容器結束:http://trac.ffmpeg.org/wiki/AACEncodingGuide

下面是檢查AAC輸出文件時,我得到了標題:

mpeg_type: 'MPEG4', 簡介:2, PROFILE_NAME: 'AAC LC', sample_freq:44100, channel_config:1, 渠道:1, 幀_:139, buffer_fullness:157, number_of_frames:1, frames_per_sec:43.06640625

任何想法,爲什麼ffmpeg的環繞音頻MP4容器?我能以某種方式解決這個問題嗎?除了FFMPEG之外,還有其他編碼器可以試試嗎?我給了FAAC編碼器一個鏡頭,它給了我適當的編碼和ADTS頭,但是它不支持MP3,只支持WAV。

回答

2

您的術語有點困惑。首先,mp4與mpeg4不是一回事。 mpeg4是一個包含各種編解碼器和容器的術語。 mp4容器也稱爲mpeg4第14部分。aac容器格式只是帶有ADTS標頭的原始aac幀的集合,它在mpeg4第3部分中進行了描述。因此.aac是mpeg4格式,但不是mp4文件。

http://en.wikipedia.org/wiki/MPEG-4

現在就想要一個MPEG2的容器,這是一個MPEG2傳輸流,節目流?

+0

你能解釋一下在ADTS頭第二個值指的是?查看ADTS標題的描述: http://wiki.multimedia.cx/index.php?title=ADTS 什麼是MPEG版本?我需要我的頭文件有MPEG-2版本,而且我實際上可以通過閱讀這裏的建議來達到此目的: http://stackoverflow.com/questions/15133393/ffmpegs-aac-libfaac-codec-options 我不得不下載ffmpeg源代碼並編輯libfaac.c文件以將默認配置從MPEG4更改爲MPEG2。然後在使用與之前相同的選項的libfaac編解碼器後工作。 – jsurf

+0

至於mpeg2流,我需要一個傳輸流,因爲我將使用這個音頻直播,這似乎是更好的選擇。 – jsurf

+0

將您的輸出文件名設置爲output.ts,並將ADTS值保持爲mpeg4。這將在MPEG2傳輸流中放入MPEG4基本流。 – szatmary

0

我能夠按照這裏的建議成功改變MPEG容器:

FFmpeg's AAC ("libfaac") Codec Options?

我需要去到FFmpeg的源代碼,並在libfaac.c改變硬編碼的MPEG版本MPEG2,在115行(與另一篇文章中提到的幾行相比)。然後我重新編譯了FFmpeg,確保包含--enable-libfaac。

+0

任何人都想通過libfdk_aac做到這一點?該庫的質量比libfaac好。 – earl3s

1

要獲得的ffmpeg & libfdk_aac設置標誌來代替MPEG2 MPEG4的使用MPEG2簡介:

ffmpeg -y -i input.mp3 -ar 44100 -ab 48k -acodec libfdk_aac -aprofile mpeg2_aac_low -ac 1 output.aac