Comment puis-je chercher à encadrer n ° X avec ffmpeg?

Je suis en train d'écrire un éditeur vidéoet j'ai besoin de chercher à l'image exacte, sachant que le numéro de l'image.

Autres postes sur stackoverflow me dit que ffmpeg peut me donner quelques cadres brisés après recherche, qui n'est pas un problème pour la lecture, mais un gros problème pour les éditeurs vidéo.

Et j'ai besoin de chercher par le numéro de l'imagepas par le temps, qui va devenir inexactes lors de la conversion au numéro de l'image.

J'ai lu dranger s tuts (qui est obsolète aujourd'hui), et à la fin avec l':

av_seek_frame(fmt_ctx, video_stream_id, frame, AVSEEK_FLAG_ANY);

Il toujours chercher à l'image No. 0et toujours return 0 ce qui signifie succès.
Alors j'ai essayé de lire Blender code source et de le trouvé vraiment complexe(peut-être que je devrait mettre en place un buffer d'image?).

Donc, est-il une manière simple de rechercher une image avec un simple appel comme seek(context, frame_number)(tout en obtenant une image complète, pas cassé)? Ou, est-il un léger bibliothèque qui simplifie ce?

EDIT:
Grâce à praks411,j'ai trouvé la solution:

void AV_seek(AV * av, size_t frame)
{
    int frame_delta = frame - av->frame_id;
    if (frame_delta < 0 || frame_delta > 5)
        av_seek_frame(av->fmt_ctx, av->video_stream_id,
                frame, AVSEEK_FLAG_BACKWARD);
    while (av->frame_id != frame)
        AV_read_frame(av);
}

void AV_read_frame(AV * av)
{
    AVPacket packet;
    int frame_done;

    while (av_read_frame(av->fmt_ctx, &packet) >= 0) {
        if (packet.stream_index == av->video_stream_id) {
            avcodec_decode_video2(av->codec_ctx, av->frame, &frame_done, &packet);
            if (frame_done) {
                ...
                av->frame_id = packet.dts;
                av_free_packet(&packet);
                return;
            }
        }
        av_free_packet(&packet);
    }
}

EDIT2:
S'avère qu'il y est une bibliothèque pour cela: FFMS2.
C'est "un FFmpeg en fonction de la source de la bibliothèque [...] pour faciliter l'image exacte de l'accès", et est portable (au moins sur Windows et Linux).

source d'informationauteur Giumo | 2013-07-09