vendredi 6 avril 2007

Les fichiers scn

Un internaute hongrois me demande quelle est la structure des fichiers *.scn.

Rappelons que les fichiers *.scn sont produits par Studio de Pinnacle et contiennent les informations relatives au découpage en scènes d'un fichier vidéo. Pinnacle ne donne guère d'indications sur la structure de ces fichiers. Donc c'est en procédant à des expérimentations que j'ai pu comprendre un certain nombre des choses que je présente ici sans garanties.

J'ai implanté l'utilisation des fichiers *.scn dans ImageGrab et dans DVdate. En outre, DVdate comme CaptureFlux peuvent créer des fichiers *.scn à partir de vidéos au format DV.

En fait, ces fichiers sont inutilement complexes et redondants. Je suppose que Pinnacle les a introduits en se basant sur les fichiers de projet *.stu qu'utilise Studio. On aurait pu créer des fichiers plus simples contenant les mêmes données. C'est donc seulement parce que j'ai souhaité une compatibilité avec Studio que j'ai travaillé sur ces fichiers *.scn.

Un fichier *.scn commence par un en-tête qui en hexadécimal est le suivant:
63 26
01 00 04 00 00 00 FF FF
03 00 0A 00 'SourceTape' [len] filename 00 00 00 00 00 00 00 00 {nbscenes} FF FF
01 00 04 00 'Clip' 50 00 00 00 FF FF

Puis pour la première scène:

01 00 05 00 'Scene' 00 00 00 00 00 (scene_2) 00 00 00 00 01 80 [len] filename 00 00 00 00 00 00 00 00 (scene_2)


Puis pour chacune des scènes suivantes, notées scene_i (avec i>=2):

03 80 F0 00 00 00 05 80 00 (scene_i) (longueur_i) 00 00 00 00 07 00 (scene_i) (longueur_i) (scene_i)

Ici ma notation est la suivante:
  • [len] est la longueur du nom du fichier avi (avec son chemin complet). [len] est noté sur un seul octet.
  • filename est le nom du fichier avi avec son chemin complet
  • {nbscenes} est le nombre total de scènes - sur 2 octets
  • (scene_i) est le numéro de la frame dans le fichier avi où commence la scène i. scene_1 n'est ici pas utilisé, car il serait nul. Ce numéro est un entier codé sur 4 octets.
  • (longueur_i) est la longueur - en nombre de frames -sur 4 octets de la scène i. Donc en principe (longueur_i)=(scene_i+1)-(scene_i)
Voilà c'est un peu bizarre, mais ce n'est pas moi qui ai inventé cela. En outre, je ne garantis pas que tous les fichiers *.scn suivent strictement ce format-là. Mais les fichiers que Studio a produit chez moi le suivent, et quand DVdate produit des fichiers *.scn de ce format, ils marchent dans Studio. Alors cela doit quand même être correct.

1 commentaire:

Paul Glagla a dit…

Lucien m'a envoyé un mail fort documenté, qu'il me paraît intéressant de publier ici.
Je pense qu'il peut apporter une solution à un problème que je me posais depuis longtemps: en effet, le fichier scn contient le nom du fichier. Mais dans beaucoup de langues ce nom est écrit en caractères Unicode, dont chacun prend deux octets. Dans la structure que j'avais publiée seul un octet par caractère pouvait être noté. Il serait intéressant de tester le format 2 de Lucien dans certaines de ces langues.

Je n'ai à ce stade pas pu vérifier tout cela. Mais j'ai pu créer quelques fichiers scn de type 2 et ai constaté que Studio 9.4.3 les acceptait et les interprétait correctement. Je vais donc lors d'une prochaine mise à jour veiller à ce que DVdate et ImageGrab reconnaissent bien les fichiers scn de type 2.

Voici en tous cas le début du mail de Lucien, suivi dans les notations que j'avais prises de la structure 2 qu'il propose:


Je posséde plus de 500 heures de video acquises à partir de camescopes : analogique (SONY V2000) ou D8 (sony 110E)
m'appartenant, ou ceux d'amis lors de voyages , voire de la famille, ....
Tous les fichiers ont été :
* capturés (ou recapturés) par studio (version 9 et 10 aujourd'hui)
* découpés en scénes par date et time code pour les camescopes digitaux
* mais ensuite subdivisés par "fractionner " et/ou "combiner " les scénes de L'ALBUM studio pour des montages (souvent provisoires).
Pour les analogiques seul ce découpage "manuel" au niveau de l'album est interessant (le découpage en clips sur la time lime n'intervient bien sur pas le contenu du fichier .SCN mais uniquement sur .STU , .STX depuis la 10 que je ne garde pas , de toute façon entre ma première machine en 95 et les 4 en réseau d'aujourd'hui avec plus de 10 disques 320 gigas , internes ou externes un projet studio n'y retrouverait pas ses petits automatiquement.)
Mes fichiers .SCN sont donc bien plus "détaillés " qu'après une capture , ou un fichier .SCN en Txt tel que le fait DVDate
(dont le but n'est pas de s'adapter à un logiciel studio en l'occurence. ou à la technique de découpage utilisée)
Pour utiliser les fichiers .SCN et en faire un base par programe (avec mots cle ,..., base qui devra se mettre automatiquement à jour si
si je refait un découpage modifiant le .SCN) , j'ai utilisé votre description des fichier .SCN
J'ai eu de désagrables surprises.
Votre description n'est valable que si le fichier .SCN est celui élaboré lors de la capture.

Dés que l'on utilise les fonctions de l'album décrites plus haut "fractionner " , voire même si
aprés des découpages "manuels" que l'on juge inadaptés aprés différentes manipulations on
repart à zéro en demandant à STUDIO un découpage par date et heure de prise de vue voire par "contenu" pour l'analogique par exemple.

LA STRUCTURE DU FICHIER .SCN EST DIFFERENTE DE LA VOTRE
Aprés analyse des fichiers correspondants j'ai pu mettre en évidence plusieurs différences
et résoudre mon problème.

J'arrive donc à 2 structures de fichiers .SCN que j'ai appelée 1 et 2
la 1 est la vôtre et comme je l'ai dit semble toujours valable pour un fichier issue de capture studio
avec option "découper les scènes selon date et heure de tournage".
La 2 celle que j'ai trouvée dès que l'on est intervenu sur les scènes capturées, soit par fonction sur l'album , soit par un demande à STUDIO de refaire le fichier .SCN


Voici la structure 2 de Lucien, avec ma notation:

Un fichier *.scn commence par un en-tête qui en hexadécimal est le suivant:

63 26
01 00 04 00 00 00 FF FF
03 00 0A 00 'SourceTape'
FF FE FF [len] widefilename
00 00 00 00 00 00 00 00 {nbscenes} FF FF
01 00 04 00 'Clip' 50 00 00 00 FF FF


Puis pour la première scène:

01 00 05 00 'Scene' FF FE FF 00 00 00 00 00 (scene_2) 00 00 00 00 01 80 FF FE FF [len] widefilename 00 00 00 00 00 00 00 00 (scene_2)



Puis pour chacune des scènes suivantes, notées scene_i (avec i>=2):

03 80 F0 00 00 00 05 80 FF FE FF 00 (scene_i) (longueur_i) 00 00 00 00 07 00 (scene_i) (longueur_i) (scene_i)


Ici ma notation est la suivante:

* [len] est la longueur du nom du fichier avi (avec son chemin complet). [len] est noté sur un seul octet. Attention, c'est le nombre de caractères Unicode. Chaque caractère étant codé sur 2 octets, la longueur du fichier en nombre d'octets sera 2*len.
* widefilename est le nom du fichier avi avec son chemin complet, écrit en caractères Unicode. Chaque caractère est codé sur 2 octets. Dans les langues occidentales, le premier caractère est le caractère ASCII normal, le second est 0.
* {nbscenes} est le nombre total de scènes - sur 2 octets
* (scene_i) est le numéro de la frame dans le fichier avi où commence la scène i. scene_1 n'est ici pas utilisé, car il serait nul. Ce numéro est un entier codé sur 4 octets.
* (longueur_i) est la longueur - en nombre de frames -sur 4 octets de la scène i. Donc en principe (longueur_i)=(scene_i+1)-(scene_i)

En clair, la structure 2 de Lucien rajoute à différents endroits les 3 octets FF FE FF et écrit les noms de fichiers en caractères Unicode sur 2 octets.

Lucien a aussi trouvé que le 7ème caractère après le widefilename de l'en-tête n'est pas toujours 00 mais est chez lui 0C. Il suggère que cela dépend de la version de Studio, mais n'a pas d'incidence sur la validité du fichier scn.

Si vous avez des idées ou des expériences comme Lucien, vous pouvez réagir sur mon blog pour contribuer à faire avancer la science pinnaclienne