Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1730 connectés 

  FORUM HardWare.fr
  Programmation
  C

  info sur une vidéo

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

info sur une vidéo

n°1583040
Digaboy
Posté le 05-07-2007 à 23:44:48  profilanswer
 

Bonjour
 
je cherche à récupérer des informations sur une vidéo, à savoir la durée, le bit rate et les dimensions. ( toute ces infos sont disponible d'un clic droit->propriété sur une vidéo)
 
Je voudrais savoir quelle librairie utiliser.
 
Merci  
 
pS:  je code sous Code Blocks sur Windows XP

mood
Publicité
Posté le 05-07-2007 à 23:44:48  profilanswer
 

n°1583064
matafan
Posté le 06-07-2007 à 07:35:28  profilanswer
 

ffmpeg peut-être ?

n°1583066
Ace17
Posté le 06-07-2007 à 07:52:04  profilanswer
 

Si t'es sous Windows, Je dirais plutot d'utiliser DirectShow

n°1583155
Digaboy
Posté le 06-07-2007 à 12:06:55  profilanswer
 

ok je me renseigne sur ffmpeg
 
En fait j'aimerais bien que mon prog soit portable donc j'aimerai éviter les librairies spécifiques à un OS

n°1599764
Digaboy
Posté le 15-08-2007 à 16:08:22  profilanswer
 

Bonjour
 
Après une courte pause, dû à des vacances, je reviens avec une idée qu'un de mes amis m'a donné :
Les informations que je cherche se trouve très certainement dans le header du fichier.  
 
Je suis rentré tout content et j'ai décidé de tester cette idée, mais je n'arrive pas à trouver les infos que je cherche.
 
En effet lorsque que j'ouvre le fichier, et que j'essaye de parcourir son contenu, je ne trouve que des informations abérantes(caractère bizarre,suite de de lettre sans aucun sens,...).
Je pense que ceci viens de ma manière d'ouvrir mon fichier et/ou de la manière de lire les données.

n°1599768
zecrazytux
Posté le 15-08-2007 à 16:16:27  profilanswer
 

une video c'est un fichier binaire
coment ouvre tu le fichier ?


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
n°1599770
Ace17
Posté le 15-08-2007 à 16:25:15  profilanswer
 

C'est quoi comme format ta video? Et c'est quoi le type de fichier?

n°1599789
Emmanuel D​elahaye
C is a sharp tool
Posté le 15-08-2007 à 19:00:49  profilanswer
 

Digaboy a écrit :

En effet lorsque que j'ouvre le fichier, et que j'essaye de parcourir son contenu, je ne trouve que des informations abérantes(caractère bizarre,suite de de lettre sans aucun sens,...).
Je pense que ceci viens de ma manière d'ouvrir mon fichier et/ou de la manière de lire les données.


Bah les informations sont organisées et codées selon une spécification bien précise qu'il faut absolument connaitre.  
 
Ceci peut aider :  
 
www.wotsit.org


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1599824
Digaboy
Posté le 15-08-2007 à 23:21:11  profilanswer
 

Donc le format que j'essaye de lire est avi mais je veux pouvoir lire des infos sur d'autre type de fichier mais une chose à la fois.
 
Emmanuel Delahaye : je n'ai trouver aucune information sur l'entête d'un fichier avi, mais j'ai peut être mal regardé
 
Voici mon code

Code :
  1. int main()
  2. {
  3.     FILE * test;
  4.     int i=0;
  5.     test = fopen("azer.avi","rb" );
  6.     for( i=0;i<220;i++)
  7.     {
  8.         printf("position %ld \t ",ftell(test));
  9.         printf("val : %d \n",fgetc(test));
  10.     }
  11. fclose(test);
  12. return 0;
  13. }


 
et voici le résultat dans la console

Code :
  1. position 0       val : 82
  2. position 1       val : 73
  3. position 2       val : 70
  4. position 3       val : 70
  5. position 4       val : 126
  6. position 5       val : 97
  7. position 6       val : 160
  8. position 7       val : 9
  9. position 8       val : 65
  10. position 9       val : 86
  11. position 10      val : 73
  12. position 11      val : 32
  13. position 12      val : 76
  14. position 13      val : 73
  15. position 14      val : 83
  16. position 15      val : 84
  17. position 16      val : 126
  18. position 17      val : 34
  19. position 18      val : 0
  20. position 19      val : 0
  21. position 20      val : 104
  22. position 21      val : 100
  23. position 22      val : 114
  24. position 23      val : 108
  25. position 24      val : 97
  26. position 25      val : 118
  27. position 26      val : 105
  28. position 27      val : 104
  29. position 28      val : 56
  30. position 29      val : 0
  31. position 30      val : 0
  32. position 31      val : 0
  33. position 32      val : 236
  34. position 33      val : 162
  35. position 34      val : 0
  36. .
  37. .// je raccourcis un peu le résultat
  38. .
  39. position 210     val : 0
  40. position 211     val : 0
  41. position 212     val : 74
  42. position 213     val : 85
  43. position 214     val : 78
  44. position 215     val : 75
  45. position 216     val : 24
  46. position 217     val : 16
  47. position 218     val : 0
  48. position 219     val : 0
  49. Press ENTER to continue.


n°1599845
Digaboy
Posté le 16-08-2007 à 01:24:27  profilanswer
 

J'ai déjà parcouru cette page mais je n'ai rien trouvé de pertinent  

mood
Publicité
Posté le 16-08-2007 à 01:24:27  profilanswer
 

n°1599862
Ace17
Posté le 16-08-2007 à 07:17:42  profilanswer
 

Digaboy a écrit :


et voici le résultat dans la console

Code :
  1. position 0       val : 82
  2. position 1       val : 73
  3. position 2       val : 70
  4. position 3       val : 70
  5. .....
  6. position 215     val : 75
  7. position 216     val : 24
  8. position 217     val : 16
  9. position 218     val : 0
  10. position 219     val : 0
  11. Press ENTER to continue.




 
Ote-moi d'un doute, tu t'attendais a voir quoi?
 
http://www.fastgraph.com/help/avi_header_format.html
 
devrait t'aider un peu plus
 

n°1599883
Emmanuel D​elahaye
C is a sharp tool
Posté le 16-08-2007 à 09:29:13  profilanswer
 

Digaboy a écrit :

Voici mon code


Pas terrible...

Code :
  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #define fname "azer.avi"
  4. int main (void)
  5. {
  6.    FILE *test = fopen (fname, "rb" );
  7.    if (test != NULL)
  8.    {
  9.       int i;
  10.       for (i = 0; i < 220; i++)
  11.       {
  12.          int c = fgetc (test);
  13.          printf ("%5d %02X %3d", i, c, c);
  14.          if (isprint (c))
  15.          {
  16.             printf (" '%c'", c);
  17.          }
  18.          printf ("\n" );
  19.       }
  20.       fclose (test);
  21.    }
  22.    else
  23.    {
  24.       perror (fname);
  25.    }
  26.    return 0;
  27. }


Les valeurs lues sont des valeurs binaire traduites en décimal, hexa et caractère quand c'est possible. Elles n'ont de sens que si on connait précisément la structure du fichier et la signification des données.


Message édité par Emmanuel Delahaye le 16-08-2007 à 09:38:27

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1599893
Koyomi
www.sebastiengilles.com
Posté le 16-08-2007 à 09:51:58  profilanswer
 

Je ne peut que te conseiller ceci  :love:  
 
http://mediainfo.sourceforge.net/fr
 

n°1610412
Digaboy
Posté le 10-09-2007 à 23:24:39  profilanswer
 

Merci beaucoup Ace17 grâce à ton lien  j'ai réussi à extraire toutes les infos qu'il me fallait.
 
La fonction permettant de calculer le temps de la vidéo:

Code :
  1. float temps_video(FILE * test)
  2. {
  3.     int valeur[56];
  4.     unsigned int val_time[4];
  5.     unsigned int val_frame[4];
  6.     unsigned int final_time=0, final_frame=0; //temps entre 2 images et nombre d'image
  7.     int i=0;
  8.     float time=0;
  9.     if (test != NULL)
  10.     {
  11.         //on ignore les 32 premiers bits
  12.         for(i=0;i<32;i++)
  13.             fgetc(test);
  14.         //on sauvegarde les 56 bits suivants
  15.         for (i = 0; i < 56; i++)
  16.             valeur[i] = fgetc (test);
  17.         for(i=0;i<4;i++)
  18.         {
  19.             //sauvegarde avec décalage
  20.             val_time[i]= valeur[i] * ((256*i ==0) ? 1 : 256*i);
  21.             final_time += val_time[i];
  22.             val_frame[i]=valeur[16+i] * ((256*i ==0) ? 1 : 256*i);
  23.             final_frame += val_frame[i];
  24.         }
  25.         //durée en microsecondes
  26.         time = final_frame*final_time;
  27.     }
  28.     else
  29.         perror ("probleme" );
  30.     // on divise par 1.000.000 puis par 60 pour passer en minutes
  31.     return time/60000000;
  32. }


 
par contre je me demandais à quoi correspond le paramètre "number of preview frame" situé sur les bits 20-21-22-23


Message édité par Digaboy le 10-09-2007 à 23:56:26
n°1616376
Digaboy
Posté le 28-09-2007 à 00:44:13  profilanswer
 

Avec l'aide de quelques personnes j'ai amélioré la fonction
Pour ceux que ça interesse:

 
Code :
  1. float temps_video(FILE * test,char* ext)
  2. {
  3.     long int final_time=0, final_frame=0;
  4.     float time=0;
  5.     if (test != NULL && strcmp(ext,"avi" )==0)
  6.     {
  7.         //on ignore les 32 premiers octets
  8.         fseek(test,32,SEEK_SET);
  9.         //on sauvegarde l'intervalle entre 2 images
  10.         fread(&final_time,4,1,test);
  11.         //on ignore les 12 octets suivants
  12.         fseek(test, 12, SEEK_CUR);
  13.         //on sauvegarde le nombre d'image
  14.         fread(&final_frame,4,1,test);
  15.         //durée en microsecondes
  16.         time = final_frame*final_time;
  17.     }
  18.     else
  19.         perror("probleme" );
  20.     // on divise par 1.000.000 puis par 60 pour passer en minutes
  21.     return time/60000000;
  22. }
 

Je redemande, si quelqu'un connait la structure d'un autre type de fichier, qu'il me fasse signe.

 

[EDIT] correction des fautes de langages.


Message édité par Digaboy le 28-09-2007 à 10:00:42
n°1616422
matafan
Posté le 28-09-2007 à 08:40:39  profilanswer
 

fseek prend des octets en paramètre, pas des bits. Tes commentaires sont faux.

n°1616425
Joel F
Real men use unique_ptr
Posté le 28-09-2007 à 08:59:20  profilanswer
 

et on parle de soucre pas de script :o


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  info sur une vidéo

 

Sujets relatifs
insésrer une video wmv[scilab]lecture video ou gif
Exam d'info, Helpintegrer un lecteur video avec mise a jour auto sur un site web?
taille player vidéotaille player vidéo
Ouvrir un lecteur video en plein écran.Créer un prog qui créer un .txt avec info complet des PC (2)
JMF && VideoCréer un prog qui créer un .txt avec info complet des PC
Plus de sujets relatifs à : info sur une vidéo


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR