samedi 24 mars 2007

Comment reconnaître un fichier DV?

J'ai trouvé ces jours-ci sur le forum du site web VideoHelp une discussion à propos de DVDate. La question était in fine de savoir comment DVDate reconnaîssait qu'un fichier avi est un fichier DV.

Le moyen traditionnel d'identifier la compression d'un fichier AVI est de lire le code à quatre caractères (le "FourCC") qui apparaît dans l'en-tête. Cette méthode se heurte cependant à deux difficultés:
  • d'une part, il y a plusieurs FourCC possibles pour un fichier DV: dvsd, dsvd ou par exemple CDVC pour le codec DV de Canopus. Il y en a encore d'autres, sans compter les variantes en majuscules.
  • d'autre part, il y a plusieurs endroits où ce FourCC peut se lire, soit dans le AVI Stream Header, dans une variable appelée FourccHandler, soit dans le Stream Format Header, dans une variable appelée bicompression.
Si vous voulez voir ces valeurs pour un fichier avi donné, ouvrez celui-ci dans DVDate et tapez CTRL+H. Vous obtenez alors un listing, dont j'ai extrait à titre d'illustration les éléments intéressants:

---------------(Vidéo)---------------
------Début du AVI Stream Header------
FourccType = vids
FourccHandler = dvsd
Flags = 00000000
Priority = 0
Language = 0000
InitialFrames = 0
Scale = 400000
Rate = 10000000
Start = 0
Length = 29
SuggestedBufferSize = 144008
Quality = 00000000
SampleSize = 0
rcFrame.Left = 0
rcFrame.Top = 0
rcFrame.Right = 720
rcFrame.Bottom = 576

-------Fin du AVI Stream Header-------

et

----Début du Stream Format Header----
biSize = 40
biWidth = 720
biHeight = 576
biPlanes = 1
biBitCount = 24
biCompression = dvsd
biSizeImage = 144000
biXPelsPerMeter = 0
biYPelsPerMeter = 0
biClrUsed = 0
biClrImportant = 0
-------Fin du AVI Stream Format-------

Le problème était donc que certaines applications créent des fichiers avi où ces deux valeurs ne coïncident pas. Cela semble être le cas des fichiers DV produits par Adobe Premiere Pro 2, où la première valeur est vide alors que la seconde est "dvsd" (si j'en crois les constatations de JohnnyMalaria). Et dans ce cas la version 6.2.1 de
DVDate ne savait pas trancher.

Il faut noter qu'avec ma webcam Logitech et mon freeware CaptureFlux, je crée des fichiers avi (certes pas DV) qui ont aussi ce problème, mais en sens inverse: c'est le FourccHandler qui est égal à "DIB ", alors que le paramètre bicompression ne comprend rien d'affichable.

------Début du AVI Stream Header------
FourccType = vids
FourccHandler = DIB
Flags = 00000000
Priority = 0
Language = 0000
InitialFrames = 0
Scale = 333333
Rate = 10000000
Start = 0
Length = 9
SuggestedBufferSize = 304136
Quality = 00000000
SampleSize = 0
rcFrame.Left = 0
rcFrame.Top = 0
rcFrame.Right = 0
rcFrame.Bottom = 0
-------Fin du AVI Stream Header-------


et


----Début du Stream Format Header----
biSize = 40
biWidth = 352
biHeight = 288
biPlanes = 1
biBitCount = 24
biCompression =
biSizeImage = 304128
biXPelsPerMeter = 0
biYPelsPerMeter = 0
biClrUsed = 0
biClrImportant = 0
-------Fin du AVI Stream Format-------

J'ouvre donc le concours: quelles sont les applications qui produisent des fichiers où ces deux paramètres sont distincts, et dans quelles conditions? Si vous en trouvez, postez nous ici le Header obtenu avec DVdate.

Dans la version 6.3.0 de
DVDate, encore en phase de test, mais téléchargeable ici, j'ai pris l'option suivante: le codec est pris dans bicompression, sauf si cette dernière valeur contient des caractères non affichables (de valeur ASCII inférieure à 32). Dans ce cas, le codec affiché par DVDate sera la valeur FourccHandler.

Je me demande cependant si cela répond à tous les cas de figure. Ne faut-il pas faire l'inverse, et donner la priorité au FourccHandler?


Aucun commentaire: