X264 encoding using Opencv
        Posted  
        
            by 
                user573193
            
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by user573193
        
        
        
        Published on 2011-01-12T18:50:33Z
        Indexed on 
            2011/01/12
            18:53 UTC
        
        
        Read the original article
        Hit count: 289
        
I am working with a high resolution camera: 4008x2672. I a writing a simple program which grabs frame from the camera and sends the frame to a avi file. For working with such a high resolution, I found only x264 codec that could do the trick (Suggestions welcome). I am using opencv for most of the image handling stuff. As mentioned in this post http://doom10.org/index.php?topic=1019.0 , I modified the AVCodecContext members as per ffmpeg presets for libx264 (Had to do this to avoid broken ffmpeg defaults settings error). This is output I am getting when I try to run the program
[libx264 @ 0x992d040]non-strictly-monotonic PTS 
1294846981.526675 1 0 //Timestamp camera_no frame_no 
1294846981.621101 1 1
1294846981.715521 1 2
1294846981.809939 1 3
1294846981.904360 1 4
1294846981.998782 1 5
1294846982.093203 1 6
    Last message repeated 7 times
[avi @ 0x992beb0]st:0 error, non monotone timestamps -614891469123651720 >= -614891469123651720
OpenCV Error: Unspecified error (Error while writing video frame) in icv_av_write_frame_FFMPEG, file /home/ajoshi/ext/OpenCV-2.2.0/modules/highgui/src/cap_ffmpeg.cpp, line 1034
terminate called after throwing an instance of 'cv::Exception'
  what():  /home/ajoshi/ext/OpenCV-2.2.0/modules/highgui/src/cap_ffmpeg.cpp:1034: error: (-2) Error while writing video frame in function icv_av_write_frame_FFMPEG
Aborted
Modifications to the AVCodecContext are:
  if(codec_id == CODEC_ID_H264) {
       //fprintf(stderr, "Trying to parse a preset file for libx264\n");
       //Setting Values manually from medium preset
       c->me_method = 7;
       c->qcompress=0.6;
       c->qmin = 10;
       c->qmax = 51;
       c->max_qdiff = 4;
       c->i_quant_factor=0.71;
       c->max_b_frames=3;
       c->b_frame_strategy = 1;
       c->me_range = 16;
       c->me_subpel_quality=7;
       c->coder_type = 1;
       c->scenechange_threshold=40;
       c->partitions = X264_PART_I8X8 | X264_PART_I4X4 | X264_PART_P8X8 | X264_PART_B8X8;
       c->flags = CODEC_FLAG_LOOP_FILTER;
       c->flags2 = CODEC_FLAG2_BPYRAMID | CODEC_FLAG2_MIXED_REFS | CODEC_FLAG2_WPRED | CODEC_FLAG2_8X8DCT | CODEC_FLAG2_FASTPSKIP;
       c->keyint_min = 25;
       c->refs = 3;
       c->trellis=1;
       c->directpred = 1;
       c->weighted_p_pred=2;
 }
I am probably not setting the dts and pts values which I believed ffmpeg should be setting it for me.
Any sugggestions welcome.
Thanks in advance
© Stack Overflow or respective owner