2012-04-12 2 views
1

Я прочитал предыдущую нить, и это ответ от Nishant, FFMPEG: Dynamic change of bit_rate for VideoFFmpeg: битрейта изменение динамически

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

И это мой код:

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

Я пытался добавить мой код для transcode(), но ffmpeg выходит после того, как он проходит через мои коды. что-то не так с моими кодами? или что еще я должен добавить?

Я поместил код после «redo:», так что он будет рекурсивно возвращаться назад. , пожалуйста, помогите !!

спасибо.

ответ

0

c is AVCodecContext Структура. Сначала вы должны настроить ffmpeg для типа файла, который вы играете. Закройте его, запустив первый файл build.sh в корневой каталог ffmpeg. для типа файла, который вы должны настроить codec9coder-decoder) и мультиплексора/демультиплексирования. , например, чтобы воспроизвести файл avi, вам необходимо настроить мультиплексор/демультиплексор и кодек для avi, который является MPEG "AVI" и "MPEG4" соответственно.

+0

Привет, спасибо за ответ, я просто хочу знать, работает ли вышеперечисленный выше код, где я должен поместить их в ffmpeg.c, или мне нужно использовать его в своем приложении. Однако я предпочитаю просто модифицировать существующий файл ffmpeg.c. –

+0

Зависит. Если это дополнение к ffmpeg, вам нужно вставить код ffmpeg и определить его прототип в файлах заголовков. Если вам не нужно делать отдельное приложение и связывать его с libavcodec (и другими библиотеками ffmpeg). Также вы должны поставить условие обработки ошибок для битрейта. Вы не можете установить бит, который не может быть достигнут CODEC_ID_H263 (h.263). – Raulp

+0

Привет, я загрузил свои коды и, пожалуйста, просмотрите все, что мне нужно изменить, чтобы оно работало? это нормально, чтобы поставить его после повтора:? –

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