Encoding 如何在配置文件FF_profile_AAC_LOW的情况下将音频编码到AAC

Encoding 如何在配置文件FF_profile_AAC_LOW的情况下将音频编码到AAC,encoding,ffmpeg,aac,Encoding,Ffmpeg,Aac,我尝试通过以下设置将音频编码到具有profileFF\u profile\u AAC\u LOW的AAC 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

我尝试通过以下设置将音频编码到具有profile
FF\u profile\u AAC\u LOW
的AAC

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\u PROFILE\u LOW
以获得
AAC(LC)
输出?

这是由我没有注意到的新ffmpeg api造成的

额外数据需要在
avcodec\u open2
之后复制回
AVStream->codepar->extradata
。之后,ffprobe可以检测我需要的格式,
AAC(LC)

以下是来自的代码片段


希望它能对任何使用最新版本的ffmpeg(3.x)的人有所帮助。

要使用它,ffmpeg 4.x应该用AV\U输入\U缓冲\U填充\U大小替换FF\U输入\U缓冲\U填充\U大小
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);
}