我正在尝试使用libavcodec/ffmpeg API在AAC-LC、AAC-HE-V1、AAC-HE-V2中编码音频。
但是当我使用下面的配置和应用程序接口时,calls.It显示“无效的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);你能解释一下这是怎么回事吗?
发布于 2013-09-20 00:53:01
首先看一下这个document:
杜比数码: ac3
杜比数码增强版: eac3
MP2: libtwolame,mp2
Windows Media音频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
作品: 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中所示
发布于 2021-07-21 21:44:23
除了使用--enable-libfdk_aac之外,您可能还必须使用
--enable-encoder=libfdk_aac如果您是选择性的并禁用了所有可用选项
--disable-everything因此,在配置之后,请检查您是否有外部库:
External libraries:
libfdk_aac和编码器:
Enabled encoders:
libfdk_aac发布于 2013-09-19 20:41:11
我认为问题在于此编码器不支持AAC-HE。您可能希望在source code中检查这一点。支持的可能包括:
FF_PROFILE_AAC_MAINFF_PROFILE_AAC_LOWFF_PROFILE_AAC_SSRFF_PROFILE_AAC_LTP您可能需要使用libfdk_aac编解码器,它支持AAC-HE。
https://stackoverflow.com/questions/18894810
复制相似问题