I set the pts and the pkt_pts but nothing changes. Keep account that I have only I-Frames. best regards
At 09.33 03/04/2012 +0200, you wrote: > >How can I set It ? In the examples included I didn't find this. >best regards > >At 09.09 03/04/2012 +0200, you wrote: >>2012/4/3 <[email protected]> >> >>> Hi to all >>> I am attempting to transcode compressed SD video in JP2K format to MPEG-2 >>> compressed video at 30, 40 and 50Mbit >>> using libavcodec only for compressing. Here is the code: >>> >>> pQTcodec = avcodec_find_encoder(CODEC_ID_MPEG2VIDEO); // find the mpeg2 >>> video encoder >>> if (!pQTcodec) {str1="Unable to find codec MPEG2";ferr=-1; goto >>> _CoreMakeMPEG2Video_err;} >>> >>> pQTCodecCtx = avcodec_alloc_context3(pQTcodec); >>> if(pQTCodecCtx==NULL) {str1="Unable to alloc codec context";ferr=-2; goto >>> _CoreMakeMPEG2Video_err;} >>> pQTFrame = avcodec_alloc_frame(); >>> if(pQTFrame==NULL) {str1="Unable to alloc frame";ferr=-3; goto >>> _CoreMakeMPEG2Video_err;} >>> >>> switch(comp_drate) >>> { >>> case 0 :cvbr=30000000; break; // 30Mbs >>> case 1 :cvbr=40000000; break; // 40Mbs >>> case 2 :cvbr=50000000; break; // 50Mbs >>> default :cvbr=25000000; break; // 25Mbs >>> } >>> >>> pQTCodecCtx->bit_rate = cvbr; >>> >>> pQTCodecCtx->rc_max_rate = pQTCodecCtx->rc_min_rate =pQTCodecCtx->bit_rate >>> = cvbr; >>> >>> pQTCodecCtx->flags = CODEC_FLAG_INTERLACED_DCT | >>> CODEC_CAP_AUTO_THREADS;// >>> | CODEC_FLAG_SVCD_SCAN_OFFSET ; >>> >>> pQTCodecCtx->flags2 = CODEC_FLAG2_INTRA_VLC | >>> CODEC_FLAG2_NON_LINEAR_QUANT; >>> >>> pQTCodecCtx->qmin = 1; >>> pQTCodecCtx->vbv_delay = 3600; >>> pQTCodecCtx->rtp_payload_size = 1; >>> pQTCodecCtx->rc_buffer_size = 2000000; >>> pQTCodecCtx->rc_initial_buffer_occupancy = 2000000; >>> >>> pQTCodecCtx->lmin = 1*FF_QP2LAMBDA; >>> pQTCodecCtx->rc_max_available_vbv_use = 1; >>> pQTCodecCtx->rc_min_vbv_overflow_use = 1; >>> vform.num = 4; >>> vform.den = 3; >>> pQTCodecCtx->sample_aspect_ratio = vform; >>> pQTCodecCtx->rc_buffer_aggressivity = 0.25F; >>> pQTCodecCtx->intra_dc_precision = 2; >>> pQTCodecCtx->qmax = 3; >>> >>> after this I call a routine that expands original frame (jpeg 2000 >>> compressed) and recompress in MPEG2 format. To this routine I pass the >>> pointer to Codec Context (pQTCodecCtx) , the pointer to a frame (pQTFrame) >>> and the pointer to the codec; that is >>> >>> >>> int Expand_Inter_MPEG2Comp_Image(unsigned char * frame, void *pCodecCtx, >>> void *pFrame,void *p_codec) >>> { >>> AVFrame *locpFrame; >>> AVCodecContext *locpCodecCtx; >>> AVCodec *codec; >>> >>> locpCodecCtx = (AVCodecContext*) pCodecCtx; >>> locpFrame = (AVFrame*)pFrame; >>> codec = (AVCodec*) p_codec; >>> >>> locpCodecCtx->width = Hsize; >>> locpCodecCtx->height = (Vsize<<1) + 32; // Add 32 blank rows on top for >>> compatibility >>> /* frames per second */ >>> >>> locpCodecCtx->time_base.num = 1; >>> locpCodecCtx->time_base.den = 25; >>> locpCodecCtx->gop_size = 0; /* emit only intra frame */ >>> locpCodecCtx->max_b_frames=0; >>> locpCodecCtx->pix_fmt = PIX_FMT_YUV422P; ///< planar YUV 4:2:2, 16bpp, (1 >>> Cr & Cb sample per 2x1 Y samples) >>> >>> rtv = av_image_alloc(locpFrame->data, locpFrame->linesize, >>> locpCodecCtx->width, locpCodecCtx->height, >>> locpCodecCtx->pix_fmt, 1); >>> >>> >>> <code for expanding original JP2K frame and setting raw data in >>> locpFrame->data array> >>> >>> locpFrame->qscale_type = 1; >>> locpFrame->top_field_first = 1; >>> locpFrame->interlaced_frame = 1; >>> >>> if (avcodec_open2(locpCodecCtx, codec,NULL) < 0) {rtv=-6;str1="on av codec >>> open";goto __end_rdec;} >>> >>> encBufSize = 0x500000; >>> out_size = avcodec_encode_video(locpCodecCtx, >>> &tempBuffer[kagsz],encBufSize >>> , locpFrame); >>> >>> >>> return out_size; >>> } >>> >>> in this case if I set different frame rates, the result is a file of >>> different size for each frame. >>> The size is congruent with frame rate, the headers are set accordingly, but >>> the remainig content is the same! ! >>> As if the only thing is to adjust headers. The only difference is that >>> files with highter frame rate are filled with zeroes at the end. >>> I upload the compressed images of the first frame compressed at 50M and at >>> 40M. Here you can see that the only diference is the header and the zero >>> fill at the end in order to obtain the size. The same frame recompressed >>> with final cut pro gives compressed stream very different. >>> >>> _______________________________________________ >>> Libav-user mailing list >>> [email protected] >>> http://ffmpeg.org/mailman/listinfo/libav-user >>> >> >>did you set the right PTS Timestamps for the Frames to be encoded? >>The PTS Timestamps are needed by the Encoder to calculate the right bitrate. >> >> >>-- >>*Media Encoding Cluster <http://codergrid.de>, * >>*the first Open Source Cluster Encoding Solution * >>*for distributed Media Encoding.* >> >> >> >>__________ Informazioni da ESET NOD32 Antivirus, versione del database >delle firme digitali 7014 (20120330) __________ >> >>Il messaggio è stato controllato da ESET NOD32 Antivirus. >> >>www.nod32.it >> >><br><br><div class="gmail_quote">2012/4/3 <span dir="ltr"><<a >href="mailto:[email protected]">[email protected]</a>></span> ><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px >#ccc solid;padding-left:1ex"> >>Hi to all<br> >>I am attempting to transcode compressed SD video in JP2K format to MPEG-2<br> >>compressed video at 30, 40 and 50Mbit<br> >>using libavcodec only for compressing. Here is the code:<br> >><br> >> pQTcodec = avcodec_find_encoder(CODEC_ID_MPEG2VIDEO); // find the mpeg2<br> >>video encoder<br> >> if (!pQTcodec) {str1="Unable to find codec MPEG2";ferr=-1; goto<br> >>_CoreMakeMPEG2Video_err;}<br> >><br> >> pQTCodecCtx = avcodec_alloc_context3(pQTcodec);<br> >> if(pQTCodecCtx==NULL) {str1="Unable to alloc codec >context";ferr=-2; goto<br> >>_CoreMakeMPEG2Video_err;}<br> >> pQTFrame = avcodec_alloc_frame();<br> >> if(pQTFrame==NULL) {str1="Unable to alloc frame";ferr=-3; goto<br> >>_CoreMakeMPEG2Video_err;}<br> >><br> >> switch(comp_drate)<br> >> {<br> >> case 0 :cvbr=30000000; break; // 30Mbs<br> >> case 1 :cvbr=40000000; break; // 40Mbs<br> >> case 2 :cvbr=50000000; break; // 50Mbs<br> >> default :cvbr=25000000; break; // 25Mbs<br> >> }<br> >><br> >> pQTCodecCtx->bit_rate = cvbr;<br> >><br> >> pQTCodecCtx->rc_max_rate = pQTCodecCtx->rc_min_rate >=pQTCodecCtx->bit_rate<br> >>= cvbr;<br> >><br> >> pQTCodecCtx->flags = CODEC_FLAG_INTERLACED_DCT | >CODEC_CAP_AUTO_THREADS;//<br> >>| CODEC_FLAG_SVCD_SCAN_OFFSET ;<br> >><br> >> pQTCodecCtx->flags2 = CODEC_FLAG2_INTRA_VLC | >CODEC_FLAG2_NON_LINEAR_QUANT;<br> >><br> >> pQTCodecCtx->qmin = 1;<br> >> pQTCodecCtx->vbv_delay = 3600;<br> >> pQTCodecCtx->rtp_payload_size = 1;<br> >> pQTCodecCtx->rc_buffer_size = 2000000;<br> >> pQTCodecCtx->rc_initial_buffer_occupancy = 2000000;<br> >><br> >> pQTCodecCtx->lmin = 1*FF_QP2LAMBDA;<br> >> pQTCodecCtx->rc_max_available_vbv_use = 1;<br> >> pQTCodecCtx->rc_min_vbv_overflow_use = 1;<br> >> vform.num = 4;<br> >> vform.den = 3;<br> >> pQTCodecCtx->sample_aspect_ratio = vform;<br> >> pQTCodecCtx->rc_buffer_aggressivity = 0.25F;<br> >> pQTCodecCtx->intra_dc_precision = 2;<br> >> pQTCodecCtx->qmax = 3;<br> >><br> >>after this I call a routine that expands original frame (jpeg 2000<br> >>compressed) and recompress in MPEG2 format. To this routine I pass the<br> >>pointer to Codec Context (pQTCodecCtx) , the pointer to a frame (pQTFrame)<br> >>and the pointer to the codec; that is<br> >><br> >><br> >>int Expand_Inter_MPEG2Comp_Image(unsigned char * frame, void *pCodecCtx,<br> >>void *pFrame,void *p_codec)<br> >>{<br> >> AVFrame *locpFrame;<br> >> AVCodecContext *locpCodecCtx;<br> >> AVCodec *codec;<br> >><br> >> locpCodecCtx = (AVCodecContext*) pCodecCtx;<br> >> locpFrame = (AVFrame*)pFrame;<br> >> codec = (AVCodec*) p_codec;<br> >><br> >> locpCodecCtx->width = Hsize;<br> >> locpCodecCtx->height = (Vsize<<1) + 32; // Add 32 blank rows on >top for<br> >>compatibility<br> >> /* frames per second */<br> >><br> >> locpCodecCtx->time_base.num = 1;<br> >> locpCodecCtx->time_base.den = 25;<br> >> locpCodecCtx->gop_size = 0; /* emit only intra frame */<br> >> locpCodecCtx->max_b_frames=0;<br> >> locpCodecCtx->pix_fmt = PIX_FMT_YUV422P; ///< planar YUV 4:2:2, >16bpp, (1<br> >>Cr & Cb sample per 2x1 Y samples)<br> >><br> >> rtv = av_image_alloc(locpFrame->data, locpFrame->linesize,<br> >> locpCodecCtx->width, locpCodecCtx->height,<br> >>locpCodecCtx->pix_fmt, 1);<br> >><br> >><br> >><code for expanding original JP2K frame and setting raw data in<br> >>locpFrame->data array><br> >><br> >> locpFrame->qscale_type = 1;<br> >> locpFrame->top_field_first = 1;<br> >> locpFrame->interlaced_frame = 1;<br> >><br> >> if (avcodec_open2(locpCodecCtx, codec,NULL) < 0) {rtv=-6;str1="on >av codec<br> >>open";goto __end_rdec;}<br> >><br> >> encBufSize = 0x500000;<br> >> out_size = avcodec_encode_video(locpCodecCtx, >&tempBuffer[kagsz],encBufSize<br> >>, locpFrame);<br> >><br> >><br> >> return out_size;<br> >>}<br> >><br> >>in this case if I set different frame rates, the result is a file of<br> >>different size for each frame.<br> >>The size is congruent with frame rate, the headers are set accordingly, but<br> >>the remainig content is the same! !<br> >>As if the only thing is to adjust headers. The only difference is that<br> >>files with highter frame rate are filled with zeroes at the end.<br> >>I upload the compressed images of the first frame compressed at 50M and at<br> >>40M. Here you can see that the only diference is the header and the zero<br> >>fill at the end in order to obtain the size. The same frame recompressed<br> >>with final cut pro gives compressed stream very different.<br> >><br> >>_______________________________________________<br> >>Libav-user mailing list<br> >><a href="mailto:[email protected]">[email protected]</a><br> >><a href="http://ffmpeg.org/mailman/listinfo/libav-user" >target="_blank">http://ffmpeg.org/mailman/listinfo/libav-user</a><br> >></blockquote></div><br>did you set the right PTS Timestamps for the Frames >to be encoded?<div>The PTS Timestamps are needed by the Encoder to calculate >the right bitrate.</div><div><br clear="all"><div><br></div>-- <br><span >style="color:rgb(51,51,51);font-family:'Lucida >Grande',Helvetica,Verdana,sans-serif;font-size:12px;line-height:20px"><b >><u><a href="http://codergrid.de" target="_blank">Media Encoding >Cluster</a></u>, </b></span><div> >><span style="color:rgb(51,51,51);font-family:'Lucida >Grande',Helvetica,Verdana,sans-serif;font-size:12px;line-height:20px"><b >>the first Open Source Cluster Encoding Solution </b></span></div><div><span >style="color:rgb(51,51,51);font-family:'Lucida >Grande',Helvetica,Verdana,sans-serif;font-size:12px;line-height:20px"><b >>for distributed Media Encoding.</b></span></div> >><br> >></div> >>_______________________________________________ >>Libav-user mailing list >>[email protected] >>http://ffmpeg.org/mailman/listinfo/libav-user >> >> >> >>__________ Informazioni da ESET NOD32 Antivirus, versione del database >delle firme digitali 7014 (20120330) __________ >> >>Il messaggio è stato controllato da ESET NOD32 Antivirus. >> >>www.nod32.it >> >> > >_______________________________________________ >Libav-user mailing list >[email protected] >http://ffmpeg.org/mailman/listinfo/libav-user > >__________ Informazioni da ESET NOD32 Antivirus, versione del database delle firme digitali 7014 (20120330) __________ > >Il messaggio è stato controllato da ESET NOD32 Antivirus. > >www.nod32.it > > > > _______________________________________________ Libav-user mailing list [email protected] http://ffmpeg.org/mailman/listinfo/libav-user
