<div dir="ltr"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="text-align:left;direction:ltr"><div><br>
</div>
<div>If I understand correctly, the AVCodecContext is instantiated separately from the FormatContext and Streams.</div>
<div>So what I have to do is:</div>
<div><br>
</div>
<div>1- Instanciate the codec context and configure it as you suggested</div>
<div>2- Instanciate an AVFormatContext</div>
<div>3- Add a stream without codec using avformat_new_stream(fmt_ctx, NULL)</div>
<div>4- set stream id and update codecpar using avcodec_parameters_from_context</div>
<div>5- generate the format header with avformat_write_header</div>
<div>6- proceed to the frame encoding loop</div>
<div><br>
</div>
<div>right?</div></div></blockquote><div><br></div><div>There is a transcoding.c example on FFmpeg's github repo. But in essence you</div><div>create new AVFormatContext first using the</div><div class="gmail_quote"><br></div>  avformat_alloc_output_context2(ofmt_ctx, NULL, NULL, ofn.c_str());<br><div><br></div><div>After that you add streams, as much as you need or as much as your container </div><div>supports using the </div><div><br></div><div>   out_stream = avformat_new_stream(ofmt_ctx, NULL);<br></div><div><br></div><div>Once you have your stream then you open the appropriate encoder for data that</div><div>you want to encode</div><div><br></div><div>      encoder = avcodec_find_encoder(AV_CODEC_ID_H264);<br></div><div><br></div><div>and based on returned value you create your AVCodecContext with</div><div><br></div><div>    enc_ctx = avcodec_alloc_context3(encoder);<br></div><div><br></div><div>You set required options using the </div><div><br></div><div>     av_opt_set_double(enc_ctx->priv_data, "crf", 23.00, 0);<br></div><div><br></div><div>and then simply open the AVCodecContext calling the</div><div><br></div><div>    ret = avcodec_open2(enc_ctx, encoder, NULL);<br></div><div><br></div><div>You then copy encoder properties to the streams AVCodecParameters</div><div><br></div><div>    ret = avcodec_parameters_from_context(out_stream->codecpar, enc_ctx);<br></div><div><br></div><div>open the file and write header.</div><div>    ret = avio_open(ofmt_ctx->pb, ofn.c_str(), AVIO_FLAG_WRITE);<br></div><div>    ret = avformat_write_header(ofmt_ctx, NULL);<br></div><div><br></div><div><br></div><div>-- <br></div></div><div dir="ltr" class="gmail_signature"><br>Regards<br>Strahinja Radman</div></div>