首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用profile FF_PROFILE_AAC_LOW将音频编码到AAC

如何用profile FF_PROFILE_AAC_LOW将音频编码到AAC
EN

Stack Overflow用户
提问于 2016-05-15 13:53:25
回答 1查看 1.5K关注 0票数 1

我尝试用配置文件FF_PROFILE_AAC_LOW将音频编码到AAC,设置如下。

代码语言:javascript
复制
oc_cxt->profile = FF_PROFILE_AAC_LOW;

另外,从av_dump_format的输出中,我得到了

代码语言:javascript
复制
Metadata:
encoder         : Lavf57.36.100
Stream #0:0: Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 192 kb/s

但是输出是不同的。一切正常,除了输出是AAC,而不是AAC (LC)。通过使用ffprobe检测,输出信息是

代码语言:javascript
复制
$ ffprobe o.m4a
...
Stream #0:0(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 195 kb/s (default)
...

AAC (LC)是我想要的结果。

但是在命令行中,ffmpeg可以生成AAC (LC)输出。下面是一个小测试。

代码语言:javascript
复制
$ 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)输出?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-18 04:36:52

这是由新的ffmpeg api引起的,我没有注意到。

额外的数据需要在avcodec_open2之后复制回avcodec_open2。在此之后,ff探头可以检测输出是我需要的格式,AAC (LC)

下面是来自ffmpeg.c的代码片段

代码语言:javascript
复制
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)的人都有帮助。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37239113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档