2012-04-12 3 views
1

J'ai lu le fil précédent et c'est la réponse de Nishant, FFMPEG: Dynamic change of bit_rate for VideoFFmpeg: changement bitrate dynamique

avcodec_init(); 

avcodec_register_all(); 

codec = avcodec_find_encoder(CODEC_ID_H263); 

c = avcodec_alloc_context(); 

picture= avcodec_alloc_frame(); 

    c->bit_rate = bitrate; 
    c->width = w; 
    c->height = h; 
    c->time_base= (AVRational){1,framerate}; 
    c->pix_fmt = PIX_FMT_YUV420P; 

avcodec_close(c); 

av_free(c); 

Et voici mon code:

if(previous_BR != cur_BR){ 
     previous_BR = cur_BR; 

     AVCodecContext* new_c = av_mallocz(sizeof(AVCodecContext));; 

     avcodec_copy_context(new_c, ost_table[0]->st->codec); 


     avcodec_close(ost_table[0]->st->codec); 
     av_free(ost_table[0]->st->codec); 

     avcodec_init(); 
     avcodec_register_all(); 

     ost_table[0]->enc = avcodec_find_encoder(CODEC_ID_H264); 
     new_c = avcodec_alloc_context3(ost_table[0]->enc); 
     ost_table[0]->st->codec = new_c; 

     AVFrame *picture= avcodec_alloc_frame(); 

     new_c->bit_rate = cur_BR; 
     new_c->width = 352; 
     new_c->height = 288; 
     int framerate = 30; 
     new_c->time_base= (AVRational){1,framerate}; 
     new_c->pix_fmt = PIX_FMT_YUV420P; 
     new_c->codec_type = AVMEDIA_TYPE_VIDEO; 
     new_c->codec_id = CODEC_ID_H264;} 

J'ai essayé d'ajouter mon code pour transcoder(), mais ffmpeg se termine après qu'il passe par mes codes. Y at-il un problème avec mes codes? ou quoi d'autre devrais-je ajouter?

Je mets le code après "redo:", de sorte qu'il va boucler récursivement. s'il vous plaît aider !!

Merci.

Répondre

0

c est AVCodecContext Structure. Vous devez d'abord configurer ffmpeg pour le type de fichier que vous jouez. Créez-le en con fi gurant le premier fichier build.sh dans le répertoire racine de ffmpeg. pour le type de fichier que vous devez configurer codec9coder-decoder) et muxer/demuxer. par exemple pour lire un fichier avi, vous devez configurer le muxer/demuxer et le codec pour avi qui est respectivement MPEG "AVI" et "MPEG4".

+0

Salut softy, merci pour la réponse, je veux juste savoir si le code que je liste ci-dessus fonctionne, où devrais-je les mettre dans le ffmpeg.c ou je dois l'utiliser dans ma propre application. Cependant, je préfère simplement modifier le fichier ffmpeg.c existant. –

+0

Depends .Si c'est un ajout à ffmpeg vous devez mettre dans le code ffmpeg et définir son prototype dans les fichiers d'en-tête.Si pas alors vous devez faire une application séparée et le lier avec libavcodec (et d'autres bibliothèques ffmpeg). devez mettre une condition de gestion d'erreur pour le bitrate. Vous ne pouvez pas mettre le bitrate qui n'est pas accpetable par CODEC_ID_H263 (h.263). – Raulp

+0

Salut softy, je télécharge mes codes et s'il vous plaît voir tout ce que j'ai besoin de modifier pour le faire fonctionner? est-ce correct de le mettre après le refaire:? –