Как кодировать h.264 с помощью libavcodec / x264?

Я пытаюсь кодировать видео с помощью libavcodec / libavformat. Звук работает отлично, но когда я пытаюсь кодировать видео, я получаю следующие ошибки:

[libx264 @ 0x10182a000]broken ffmpeg default settings detected  
[libx264 @ 0x10182a000]use an encoding preset (vpre)  

легко исправить с помощью командной строки ffmpeg, но я пытаюсь сделать это в C. у меня есть варианты

AVStream *pVideoOutStream = av_new_stream(pOutFormatCtx, 0);  
AVCodecContext *pVideoOutCodecCtx  = pVideoOutStream->codec;  

pVideoOutCodecCtx->codec_id        = CODEC_ID_H264;    
pVideoOutCodecCtx->codec_type      = CODEC_TYPE_VIDEO;  
pVideoOutCodecCtx->bit_rate        = pVideoInCodecCtx->bit_rate;  
pVideoOutCodecCtx->width           = pVideoInCodecCtx->width;    
pVideoOutCodecCtx->height          = pVideoInCodecCtx->height;  
pVideoOutCodecCtx->pix_fmt         = pVideoInCodecCtx->pix_fmt;    
pVideoOutCodecCtx->sample_rate     = pVideoInCodecCtx->sample_rate;    
pVideoOutCodecCtx->gop_size        = 30;  

, но avcodec_open () не работает.

Какие еще значения мне нужно установить, чтобы сделать x264 счастливым?

19
задан Ciro Santilli 新疆改造中心法轮功六四事件 2 April 2016 в 21:38
поделиться

1 ответ

Я кодирую изображения YUV420P в разные форматы, используя разные кодеки. CodecID я взял из AVOutputFormat после использования функции предположения_формата(...). Но другие настройки кодека (Все они взяты из исходного кода примеров ffmpeg):

c->codec_id = (CodecID)CODEC_ID_H264; //This is your codec id
c->codec_type = CODEC_TYPE_VIDEO;

c->bit_rate = 1000000;  
c->width = <...>;  
c->height = <...>;  
c->time_base.den = 25;  
c->time_base.num = 1;  
c->gop_size = 12;  
c->pix_fmt = PIX_FMT_YUV420P;  
if (c->codec_id == CODEC_ID_MPEG1VIDEO) //It not necessary for you 
   c->mb_decision=2;  
// some formats want stream headers to be separate  
if(oc->oformat->flags & AVFMT_GLOBALHEADER)  
   c->flags |= CODEC_FLAG_GLOBAL_HEADER; 

Эта настройка должна работать с большинством кодеков, но у меня возникла проблема с fps: не все кодеки поддерживают любые значения fps (и некоторые другие параметры тоже).

3
ответ дан 30 November 2019 в 02:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: