[Libav-user] H.264 codec frames lost
BIGLER Don (Framatome)
don.bigler at framatome.com
Fri Mar 1 16:10:09 EET 2019
>From: Libav-user [mailto:libav-user-bounces at ffmpeg.org] On Behalf Of Gustav González
>Sent: Friday, March 01, 2019 12:30 AM
>To: This list is about using libavcodec, libavformat, libavutil, libavdevice and libavfilter.
>Subject: [Libav-user] H.264 codec frames lost
>
>Security Notice: Please be aware that this email was sent by an external sender.
>Hi,
>I implemented a basic tool to convertt an array of images into a video file, following some of the ffmpeg/libav examples available in several forums.
>The code works great using the MPEG4 codec, but when I try the H,264 something strange occurs: I lost 30% of the frames (usually the last ones).
>Checking on the code, I found out that this instructions is related to the issue:
>
>int ret = avcodec_encode_video2(c, &pkt, videoFrame, &got_output);
>
>The variable got_output gets NULL value in many of the iterations while I am creating the video file:
>
>if (got_output) {
> if (c->coded_frame->key_frame)
> pkt.flags |= AV_PKT_FLAG_KEY;
> pkt.stream_index = video_st->index;
> ret = av_interleaved_write_frame(oc, &pkt);
> av_free_packet(&pkt);
>} else {
> ret = 0;
> }
>So I wonder what I could be missing related to the H,264 codec, understanding that using exactly the same code, the codec MPEG4 works perfectly.
>Any codec settings that I should care about? Any suggestion?
>
>Thanks!
>--
> Gustav Gonzalez
> xtingray at gmail.com
H.264 encoding uses temporal compression techniques. So it queues frames in order to compute compression over multiple frames. That means got_ouput will be 0 at times before producing a compressed packet. Since you observed that the missing packets are at the end I suspect that you are not flushing the codec after feeding it all of the images. See the flush_encoder() function in the transcoding example (https://github.com/FFmpeg/FFmpeg/blob/master/doc/examples/transcoding.c).
Regards,
Don Bigler
More information about the Libav-user
mailing list