gpt4 book ai didi

encoding - 如何使用配置文件 FF_PROFILE_AAC_LOW 将音频编码为 AAC

转载 作者:行者123 更新时间:2023-12-04 22:53:38 25 4
gpt4 key购买 nike

我尝试使用配置文件 FF_PROFILE_AAC_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_PROFILE_LOW获取 AAC (LC)输出?

最佳答案

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

多余的数据需要复制回AVStream->codecpar->extradataavcodec_open2 之后.之后,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) 的人有所帮助。

关于encoding - 如何使用配置文件 FF_PROFILE_AAC_LOW 将音频编码为 AAC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37239113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com