Cómo codificar el audio en AAC-LC, AAC-SE-V1, AAC-HE-V2 usando libavcodec?

Estoy tratando de codificar el audio en AAC-LC,AAC-SE-V1, AAC-HE-V2 usando libavcodec/ffmpeg Api.

Pero cuando estoy usando la siguiente configuración y llamadas a la API.Dice «invalid perfil 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);

Podría por favor explicar lo que está mal con esto?

2 Kommentare

  1. 2

    Primero de todo, echa un vistazo a este
    documento:

    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, aac, libvo_aacenc

    He-AAC: libfdk_aac, libaacplus

    Vorbis: libvorbis, vorbis

    MP3: libmp3lame, libshine

    Opus: libopus

    de la anterior, la lectura va a ser claro para usted que con el fin de codificar audio he-AAC/he-AAC-V2 tienes que utilizar libfdk_aac o libaacplus.

    Voy a explicar cómo se puede hacer uso de libfdk_aac:

    primero asegúrese de configurar ffmpeg junto con las opciones siguientes:

    --enable-libfdk_aac --enable-nonfree

    ahora compilar ffmpeg y trate de ejecutar el siguiente comando y ver si funciona:

    ffmpeg -i <input file> -vcodec copy -acodec libfdk_aac -profile:a aac_he <output file>

    si funciona esto significa libav está vinculado con libfdk_aac.

    ahora en el fin de utilizarlo en el código:

    abrir el codificador usando las siguientes instrucciones:

    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);
    

    Aquí vamos, tienes libfdk_aac codificador abierta !
    Los perfiles que se puede utilizar es el que aparece en este fuente

  2. 0

    Supongo que el problema es que la AAC-ÉL no es compatible con este codificador. Es posible que desee comprobar esto en código fuente. Compatibles son propensos a ser:

    • FF_PROFILE_AAC_MAIN
    • FF_PROFILE_AAC_LOW
    • FF_PROFILE_AAC_SSR
    • FF_PROFILE_AAC_LTP

    Usted podría necesitar el uso de libfdk_aac códec, que ha AAC-LE apoyo.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea