我正在尝试使用libavcodec / ffmpeg API在AAC-LC,AAC-HE-V1,AAC-HE-V2中编码音频。
但是当我使用以下配置和API调用时。它说“AAC配置文件无效。”
AVCodecContext *encoder_ctx;
encoder_ctx->codec_id = AV_CODEC_ID_AAC;
encoder_ctx->sample_fmt = AV_SAMPLE_FMT_S16;
encoder_ctx->profile = FF_PROFILE_AAC_HE;
encoder = avcodec_find_encoder(encoder_ctx->codec_id);
avcodec_open2(encoder_ctx, encoder, NULL);
你能解释一下这有什么问题吗?
答案 0 :(得分:2)
首先来看看这个 document:
杜比数字:ac3
Dolby Digital Plus:eac3
MP2:libtwolame,mp2
Windows Media Audio 1:wmav1
Windows Media Audio 2:wmav2
LC-AAC:libfdk_aac,libfaac,aac,libvo_aacenc
HE-AAC:libfdk_aac,libaacplus
Vorbis:libvorbis,vorbis
MP3:libmp3lame,libshine
Opus:libopus
从上面的阅读中可以清楚地看到,为了在HE-AAC / HE-AAC-V2中编码音频,您必须使用libfdk_aac或libaacplus。
我将解释如何使用libfdk_aac执行此操作:
首先确保配置ffmpeg以及以下选项:
--enable-libfdk_aac --enable-nonfree
现在构建ffmpeg并尝试运行以下命令并查看它是否有效:
ffmpeg -i <input file> -vcodec copy -acodec libfdk_aac -profile:a aac_he <output file>
如果这有效,则意味着libav与libfdk_aac链接。
现在为了在代码中使用它:
按照以下说明打开编码器:
AVCodecContext *encoder_ctx;
encoder_ctx->codec_id = AV_CODEC_ID_AAC;
encoder_ctx->sample_fmt = AV_SAMPLE_FMT_S16;
encoder_ctx->profile = FF_PROFILE_AAC_HE;
encoder = avcodec_find_encoder_by_name("libfdk_aac");
// if you still try to open it using avcodec_find_encoder it will open libfaac only.
avcodec_open2(encoder_ctx, encoder, NULL);
我们走了,你有libfdk_aac编码器打开! 您可以使用的配置文件如此source
中所示答案 1 :(得分:1)
除了使用--enable-libfdk_aac,您可能还需要使用
--enable-encoder=libfdk_aac
如果您有选择性并使用
禁用所有可用选项--disable-everything
所以在 configure 之后检查你是否有外部库:
External libraries:
libfdk_aac
和编码器:
Enabled encoders:
libfdk_aac
答案 2 :(得分:0)
我想问题是这个编码器不支持AAC-HE。您可能需要在source code中查看此内容。支持可能是:
FF_PROFILE_AAC_MAIN
FF_PROFILE_AAC_LOW
FF_PROFILE_AAC_SSR
FF_PROFILE_AAC_LTP
您可能需要使用具有AAC-HE支持的libfdk_aac
编解码器。