begin process at 2012 05 27 15:36:14
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Multimédia

 > DÉTERMINER LA DURÉE D'UN FICHIER AVI

DÉTERMINER LA DURÉE D'UN FICHIER AVI


 Information sur la source

Note :
Aucune note
Catégorie :Multimédia Classé sous :durée AVI, vidéo, temps vidéo Niveau :Débutant Date de création :26/09/2007 Date de mise à jour :28/09/2007 00:37:55 Vu :5 513

Auteur : Digaboy

Ecrire un message privé
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 Description

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_form at.html


Source

  • 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;
  • }
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.


 Historique

26 septembre 2007 22:52:29 :
correction ortho
27 septembre 2007 11:17:15 :
changement de for(i=0;i<4;i++) { //sauvegarde avec décalage val_time[i]= valeur[i] * ((256*i ==0) ? 1 : 256*i); final_time += val_time[i]; val_frame[i]=valeur[16+i] * ((256*i ==0) ? 1 : 256*i); final_frame += val_frame[i]; } par final_time = buffer[0] + buffer[1]*256 + buffer[2]*65536 + buffer[3]*16777216; final_frame = buffer[16] + buffer[17]*256 + buffer[18]*65536 + buffer[19]*16777216;
27 septembre 2007 11:18:27 :
amélioration du calcul : boucle for remplacé par des calculs statiques
27 septembre 2007 11:19:12 :
remplacer boucle par calcul statique
27 septembre 2007 11:21:09 :
faute de frappe
27 septembre 2007 19:49:09 :
utilisation de fread
28 septembre 2007 00:37:55 :
remplacement de for(i=0;i<32;i++) fgetc(test); for(i=0;i<12;i++) fgetc(test); par fseek(test, 32, SEEK_SET); fseek(test, 12, SEEK_CUR);

 Sources de la même categorie

Source avec Zip ADAPTER LES TEMPS DE SUBTITLES DE SOUS TITRAGE ENTRE DEUX LA... par berrami
Source avec Zip Source avec une capture DÉTECTION DE VISAGE (YEUX, NEZ, BOUCHE) AVEC OPENCV EN TEMPS... par MadM@tt
Source avec Zip Source avec une capture GÉNÉRATEUR FM EXPÉRIMENTAL par tontonCD
Source avec Zip LECTEUR MULTIMÉDIA par omegatou
Source avec Zip IMPLÉMENTATION D'UN ALGORITHME DE COMPRESSION/DECOMPRESSION ... par eemikhm

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture SHELLTUNNING : VIDÉO À LA PLACE DU FOND D'ÉCRAN par poppyto
Source avec Zip Source avec une capture 2D HARDWARE AVEC DIRECTX 9 par Galmiza

Commentaires et avis

Commentaire de juju12 le 26/09/2007 23:03:54

Tu peux remplacer for(i=0;i<56;i++) getc(...);
par fread(pBuffer,1,56,pFile);

et (256*i==0)? par (!i)? (je comprends pas pourquoi t'as mis ca en fait)

de plus comme tous tes calculs sont statiques tu pourrais les écrire directement sans boucle for.

Commentaire de Digaboy le 27/09/2007 10:53:13

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.

Commentaire de juju12 le 27/09/2007 17:46:11

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)

Commentaire de Digaboy le 27/09/2007 19:51:17

merci bien à toi pour cette aide, je ne savais pas que l'on pouvait récupérer 4 bytes d'un coup.

Commentaire de SAKingdom le 27/09/2007 23:33:40

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

Commentaire de max12 le 28/09/2007 21:03:48 administrateur CS

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

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

codec de compression vidéo [ par jcom ] salut ! quelqu'un aurait pas une idée (ou des liens) sur la façon de créer un codec de compression vidéo (genre divx sans la prétention) ? Lire une vidéo avi dans les MFC [ par mickey ] J'ai conçu un programme en MFC et en cpp.Peut on lire une vidéo avi dans une boite de dialogue faites en MFC ?Connaissez vous une adresse où je peux t Résolution vidéo [ par brozman ] Bonjour,comment modifier la résolution d'affichage d'une vidéo avec un composant MediaPlayer ?Merci d'avance pour votre aide.Brozman. images JPEG en vidéo MPEG1 [ par brozman ] Bonjour, je dois faire un programme qui genere un fichier video au format MPEG1 a partir d'images JPEG,est-ce qu'il existe des programmes, des sources Jeu vidéo C/C++ (simple 2D), help svp [ par cyberlewis ] Slt,J'aimerais bien prog un jeu vidéo en C/C++.J'utilise DevC++Bon en fait c'est assez rapide à expliquer,Disons quelques tiles (16x16), un sprite pr lecture d'un fichier avi comprenant un clip vidéo et non une animation par des boutons de dialogue box ou contrôleur MCI avec le langage c++ [ par brrouabdellah ] je trouve des difficultés à réaliser un programme en c++ qui peut lire un fichier avi comprenant un clip vidéo et non une animation. Mr Vieuxlion a ré pb de pointeur sur la mémoire de la carte vidéo [ par NeoFab ] Salut à tous!J'étudie en ce moment la programmation en C sous Turbo c++ pour faire du graphisme, en écrivant directement dans la mémoire de la carte v extraction d'images d'un flux video [ par neoX13 ] Je cherche à extraire des images d'un flux vidéo provenant d'une carte d'acquisition, ce que je n'ai jamais réalisé. Je programme en C++ et je ne conn acquisition vidéo composite [ par stamina ] Hello tt le monde!!!!!!!!!!Aider moi SVPJ'en viens à demander un coup de main à tous ceux qui surf s/ ce site: Je veu capturer un signal vidéo sur éch Equipe de développement de jeu vidéo recherche programmeurs [ par Johann21 ] Nous sommes une équipe de développement de jeu vidéo en constitution. Nous travaillons actuellement à la réalisation d'un jeu d'action / aventure dest


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,827 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales