Déterminer la durée d'un fichier avi

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 247 fois - Téléchargée 18 fois

Contenu du snippet

Permet de trouver la durée d'un fichier AVI en parcourant l'entête du fichier.

Voici comment est constitué l'entête d'un fichier AVI:
http://www.fastgraph.com/help/avi_header_format.html

Source / Exemple :


float temps_video(FILE * test,char* ext)
{
    long int final_time=0, final_frame=0;    
    float time=0;

    if (test != NULL && strcmp(ext,"avi")==0)
    {
        //on ignore les 32 premiers bits
        fseek(test, 32, SEEK_SET);

        //on sauvegarde l'intervalle entre 2 images
        fread(&final_time,4,1,test);

        //on ignore les 12 bits suivants
        fseek(test, 12, SEEK_CUR);

        //on sauvegarde le nombre d'image
        fread(&final_frame,4,1,test);

        //durée en microsecondes
        time = final_frame*final_time;
    }
    else
        perror("probleme");

    // on divise par 1.000.000 puis par 60 pour passer en minutes
    return time/60000000;

}

Conclusion :


Voila ma contribution, si vous avez des idées pour améliorer ce script n'hésiter pas et si vous savez où je peux trouver la construction d'un header pour d'autre format je suis preneur.

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1491
Date d'inscription
dimanche 19 novembre 2000
Statut
Modérateur
Dernière intervention
7 juillet 2014

Sa s'améliore sans cesse :) Dernier petit tip, au lieu de perror("probleme") tu devrait plutot passer un pointeur vers un int en argument que tu change selon que la fonction a échoué ou non et vérifier que la lecture s'est faite correctement. Sinon sa de plus en plus propre :P
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
for(i=0;i<32;i++) fgetc(test);
for(i=0;i<12;i++) fgetc(test);

Inutile de lire des caractères que l'on n'utilise pas (et encore plus de les lire un par un)

À remplacer par fseek
Messages postés
6
Date d'inscription
mardi 7 août 2007
Statut
Membre
Dernière intervention
27 septembre 2007

merci bien à toi pour cette aide, je ne savais pas que l'on pouvait récupérer 4 bytes d'un coup.
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
Oui c'est juste le 256*i que je trouvais bizarre pas le test.
Autre chose : tu pourrais récupérer directement un int32 au lieu d'additionner les char, du genre fread(&final_time,4,1,file)
Messages postés
6
Date d'inscription
mardi 7 août 2007
Statut
Membre
Dernière intervention
27 septembre 2007

Merci pour ces conseils

((256*i ==0) ? 1 : 256*i) ceci me permet de décaler la valeur de 0, 8, 16 ou 24 bits. Mais la première valeur ne doit pas être décalé donc lorsque i==0 je dois conserver la valeur de valeur[i] en la multipliant par 1 au lieu de valeur[i]*256*i car ceci est égal à 0.

mais je pense que je vais, comme tu me l'a conseillé, mettre tout en dur dans mon code.
Afficher les 6 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.