Hi, Before sending you some patches to fix it, I would like to know how you want this issue to be fixed. Let me explain it:
When we enable vstats file to be generated, each line of the file contains the frame number of the encoded video frames. The frame number is the one from AVStream.nb_frames See https://github.com/FFmpeg/FFmpeg/blob/master/ffmpeg.c#L1345 The problem is that nb_frames is being incremented only when we succeed to write the encoded frame to the muxer. https://github.com/FFmpeg/FFmpeg/blob/master/libavformat/mux.c#L1270 But we get there only when the function interleave_packet does return 1, which means a packet can be output. If the function interleave_packet return 0, because no packet could be output (waiting for some audio frames to be encoded for example), the nb_frames is not incremented. In this case, when we call do_video_stats, the AVStream.nb_frames was not incremented and you will get a new entry in the file with the frame number of the last video frames being written to the muxer. Here are some ideas to fix it: * Instead of using AVStream.nb_frames, used OutputStream.frame_number which is incremented just before calling do_video_stats See https://github.com/FFmpeg/FFmpeg/blob/master/ffmpeg.c#L1303 * Increment AVStream.nb_frames after calling interleave_packet by checking (ret >= 0). But in this case, the nb_frames will be the number of frames going through the interleave_packet but not the number of frames written to the muxer. * Add a new field in the AVStream, maybe call it nb_encoded_frame (similar to nb_decoded_frames) * any other suggestion? Thanks. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel