如何使用配置文件 FF_PROFILE_AAC_LOW 将音频编码为 AAC
How to encode audio to AAC with profile FF_PROFILE_AAC_LOW
我尝试通过以下设置将音频编码为配置文件 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)
...
如何 select FF_PROFILE_LOW
得到 AAC (LC)
输出?
这是由我没有注意到的新 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) 的任何人有所帮助。
我尝试通过以下设置将音频编码为配置文件 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)
...
如何 select FF_PROFILE_LOW
得到 AAC (LC)
输出?
这是由我没有注意到的新 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) 的任何人有所帮助。