2013-09-19 2 views
0

Я пытаюсь кодировать аудио в AAC-LC, AAC-HE-V1, AAC-HE-V2 с использованием API-интерфейсов libavcodec/ffmpeg.Как кодировать аудио в AAC-LC, AAC-HE-V1, AAC-HE-V2 с помощью libavcodec?

Но когда я использую следующую конфигурацию и вызовы 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); 

Не могли бы вы объяснить, что в этом плохого?

ответ

2

Прежде всего, посмотрите на эту document:

Dolby Digital: ac3

Dolby Digital Plus: EAC3

MP2: libtwolame, MP2

Windows Media Audio 1: wmav1

Windows Media Audio 2: wmav2

LC-AAC: libfdk_aac, libfaac, ААС, libvo_aacenc

HE-AAC: libfdk_aac, libaacplus

Vorbis: libvorbis, Vorbis

MP3: libmp3lame, libshine

Opus : libopus

Из приведенного выше документа вам будет ясно, что для кодирования звука в HE-AAC/HE-AAC-V2 вам необходимо использовать libfdk_a ac или libaacplus.

я объясню, как вы можете сделать это с помощью libfdk_aac:

первый убедитесь, что вы настроить FFmpeg вместе со следующими опциями:

--enable-libfdk_aac --enable-несвободные

Теперь построить FFmpeg и попробуйте запустить следующую команду и посмотреть, если он работает:

$ FFmpeg -i -vcodec копия -acodec libfdk_aac -profile: а aac_he

Если это работает, значит, 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

0

Я полагаю, проблема в том, что AAC-HE не поддерживается на этом кодере. Вы можете проверить это в source code. Поддерживается, вероятно, будут:

  • FF_PROFILE_AAC_MAIN
  • FF_PROFILE_AAC_LOW
  • FF_PROFILE_AAC_SSR
  • FF_PROFILE_AAC_LTP

Вам может понадобиться использовать libfdk_aac кодек, который поддерживает AAC-HE.

Смежные вопросы