[Libav-user] Fwd: Frame number mismatch

Tr3wory tr3w at freemail.hu
Sun Sep 13 11:05:32 CEST 2015


Hi,

My code currently does nothing other than decode the packets to AVFrame-s
and count the number of decoded frames.
Something like this (I removed the error checking and other not interesting
stuff):

    av_register_all();

    AVFormatContext* formatCtx = NULL;

    avformat_open_input(&formatCtx,filename,NULL,NULL);

    avformat_find_stream_info(formatCtx,NULL);

    // Find the first video stream
    int videoStreamIdx = -1;
    for (int i = 0; i < formatCtx->nb_streams; ++i)
        if (formatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO)
{
            videoStreamIdx = i;
            break;
        }

    if (videoStreamIdx == -1) { /* Error handling */ }

    AVCodec* codec =
avcodec_find_decoder(formatCtx->streams[videoStreamIdx]->codec->codec_id);

    AVCodecContext* codecCtx = avcodec_alloc_context3(codec);

    avcodec_copy_context(codecCtx,
formatCtx->streams[videoStreamIdx]->codec);

    avcodec_open2(codecCtx,codec,NULL);

    AVPacket packet;
    AVFrame* frame = av_frame_alloc();

    int avError;
    int frameNo = 0;
    while ((avError = av_read_frame(formatCtx, &packet)) >= 0) {

        if (packet.stream_index == videoStreamIdx) {
            int isFrameFinished = 0;
            avcodec_decode_video2(codecCtx,frame,&isFrameFinished,&packet);

            if (isFrameFinished) {
                ++frameNo;
            }
        }
        av_free_packet(&packet);
    }

    if (codec->capabilities & AV_CODEC_CAP_DELAY) {
        // Flush codec buffer
        av_init_packet(&packet);
        packet.data = NULL;
        packet.size = 0;

        int isFrameFinished = 0;
        while
((avcodec_decode_video2(codecCtx,frame,&isFrameFinished,&packet) >= 0) &&
isFrameFinished) {
                ++frameNo;
        }
        av_free_packet(&packet);
    }

    avcodec_free_context(&codecCtx);
    avformat_close_input(&formatCtx);

This code gives me 21239 frames.

I called ffmpeg like this:
~/BUILD/ffmpeg/bin/ffmpeg -i testvideo.mp4 images/frame-%05d.jpeg

This produced 21839 jpeg images.

Versions:
ffmpeg version N-75147-g9d742d2 Copyright (c) 2000-2015 the FFmpeg
developers
  built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04)
  configuration: --prefix='~/BUILD/ffmpeg'
  libavutil      55.  1.100 / 55.  1.100
  libavcodec     57.  1.100 / 57.  1.100
  libavformat    57.  0.100 / 57.  0.100
  libavdevice    57.  0.100 / 57.  0.100
  libavfilter     6.  1.100 /  6.  1.100
  libswscale      4.  0.100 /  4.  0.100
  libswresample   2.  0.100 /  2.  0.100

Any thoughts?

Best,
Tr3wory


On Sat, Sep 12, 2015 at 2:44 PM, Mohamed Moanis <mohamed_moanis at outlook.com>
wrote:

>
> >From: tr3w at freemail.hu
> >Date: Sat, 12 Sep 2015 13:31:27 +0200
> >To: libav-user at ffmpeg.org
> >Subject: [Libav-user] Fwd: Frame number mismatch
> >
> >Hi all!
> >
> >I'm unfortunate enough that I have a steady stream of midly
> corrupted/badly encoded mp4/h264 videos what I need to process. I >wrote
> a simple program based on some tutorial on the internet which reads all the
> video frames using av_read_frame and >avcodec_decode_video2, I even flush
> the internal buffer of the decoder with some empty packets in the end. (No
> errors in the >process, no corrupted frames...)
> >
> >It looks good and well until I run the ffmpeg standalone tool (compiled
> from the same source three) with jpg output, which >produces 600 more
> frames than my frame reader (from a 24k frame long video). (All frames look
> valid, but maybe duplicated...)
> >
> >What ffmpeg does differently? Did I miss something? (Like a flag in
> AVFrame which tells me to duplicate, or some options in the >decoder?)
> >
> >Thanks for your help!
> >
> >Best,
> >Tr3wory
> What your frame reader does, does it just write frames as jpegs?
> and what are the arguments to ffmpeg!
>
> please give more explanation for the problem
>
> _______________________________________________ Libav-user mailing list
> Libav-user at ffmpeg.org http://ffmpeg.org/mailman/listinfo/libav-user
>
> _______________________________________________
> Libav-user mailing list
> Libav-user at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/libav-user
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://ffmpeg.org/pipermail/libav-user/attachments/20150913/65cca8fe/attachment.html>


More information about the Libav-user mailing list