2016-05-15 78 views
0

我嘗試使用以下設置將音頻編碼爲AAC並使用配置文件FF_PROFILE_AAC_LOW如何使用配置文件將音頻編碼爲AAC FF_PROFILE_AAC_LOW

oc_cxt->profile = FF_PROFILE_AAC_LOW; 

另外從av_dump_format輸出,我得到這個

Metadata: 
encoder   : Lavf57.36.100 
Stream #0:0: Audio: aac (LC) (mp4a/0x6134706D), 44100 Hz, stereo, fltp, 192 kb/s 

但產量是不同的。一切正常,除了輸出是AAC,而不是AAC (LC)。通過使用ffprobe來檢測,輸出信息是

$ ffprobe o.m4a 
... 
Stream #0:0(und): Audio: aac (mp4a/0x6134706D), 44100 Hz, stereo, fltp, 195 kb/s (default) 
... 

AAC (LC)是所期望的結果,我需要。

但是從命令行,ffmpeg可以生成AAC (LC)輸出。以下是一個小測試。

$ ffmpeg -f lavfi -i aevalsrc="sin(440*2*PI*t):d=5" aevalsrc.m4a 
$ ffprobe aevalsrc.m4a 
... 
Stream #0:0(und): Audio: aac (LC) (mp4a/0x6134706D), 44100 Hz, mono, fltp, 69 kb/s (default) 
... 

如何選擇FF_PROFILE_LOW得到AAC (LC)輸出?

回答

1

這是由於我沒有注意到新的ffmpeg api引起的。

avcodec_open2後需要複製回AVStream->codecpar->extradata的額外數據。之後,ffprobe可以檢測輸出是我需要的格式,AAC (LC)

以下是ffmpeg.c

if (!ost->st->codecpar->extradata && avctx->extradata) { 
    ost->st->codecpar->extradata = av_malloc(avctx->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE); 
    if (!ost->st->codecpar->extradata) { 
     av_log(NULL, AV_LOG_ERROR, "Could not allocate extradata buffer to copy parser data.\n"); 
     exit_program(1); 
    }  
    ost->st->codecpar->extradata_size = avctx->extradata_size; 
    memcpy(ost->st->codecpar->extradata, avctx->extradata, avctx->extradata_size); 
} 

希望一段代碼,任何人都使用最新版本的ffmpeg(3.X),這將是有幫助的。

相關問題