dimanche 25 janvier 2009

Retour sur les fichiers scn

En avril 2007 j'ai donné dans ce blog les informations dont je disposais sur les fichiers scn produits par Studio de Pinnacle. Vous pouvez les retrouver ici. Depuis cette date, mes connaissances sur ce type de fichier ont progressé sur trois éléments:

1) On peut dans chaque scène choisir l'image miniature qui sera affichée pour visualiser la scène. Par défaut c'est la première image, celle dont l'offset par rapport au début de la scène est 0. Dans Studio vous avez un menu contextuel qui permet de choisir une autre miniature. Cela s'intègre alors dans le fichier scn en ajoutant l'offset de cette image par rapport au début de scène. Pour signaler que cette donnée supplémentaire est présente, un indicateur est mis à $40.

2) On peut ajouter un titre aux scènes. Ce titre est affiché sur deux lignes dans Studio, mais peut éventuellement déborder sur davantage de lignes. Pour indiquer qu'un tel titre est présent, un indicateur est mis à $80. Le titre peut être en caractères UTF-8 ou UTF-16 (widechar).

3) On peut ajouter un commentaire aux scènes, qui sera ignoré dans Studio. C'est éventuellement utile pour mettre des mots-clés etc... En réalité ce commentaire, qui peut aussi être UTF-8 ou UTF-16 est toujours présent, mais en général il est rempli par une chaîne vide.

Voilà donc la nouvelle structure des fichiers avi, où j'ai au passage unifié ce que Lucien appelait le type 1 et le type 2!

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'
[nom complet du fichier]
00 00 00 00 00 00 00 00 {{nombre de scenes}} FF FF
01 00 04 00 'Clip' 50 xx yy 00 FF FF

Puis pour la première scène:

01 00 05 00 'Scene'
[commentaire_1]
(scene_1)
(longueur_1)
00 00 00 00 01 80
[fichier]
00 00 00 00
00 00 00 00
(longueur_1)
<(image_1)> si (yy and $40)<>0
<[titre_1]> si (xx and $80)<>0


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

03 80 F0 xx yy 00 05 80
[commentaire_i]
(scene_i)
(longueur_i)
00 00 00 00 07 00
(scene_i)
(longueur_i)
(scene_i)
<(image_i)> si (yy and $40)<>0
<[titre_i]> si (xx and $80)<>0


Ici ma notation est la suivante:
  • {{nombre}} est un nombre codé sur 2 octets
  • (scene_i) est le numéro de la frame dans le fichier avi où commence la scène i. Par exemple scene_1 est 0. 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 (longueur_i)=(scene_i+1)-(scene_i)
  • <> si condition : signifie que l'élément est optionnel, et il n'est présent que si la condition est remplie
  • [texte] est une chaine de caractères précédée de sa longueur et éventuellement de caractères de code selon une des syntaxes suivantes:
00 => texte vide
{len} avec len<$FF => texte UTF-8 de longueur len
FF {{len}} avec len<$FFFE => texte UTF-8 de longueur len

FF FE FF 00 => texte vide
FF FE FF {len} avec len<$FF => texte UTF-16 de longueur len
FF FE FF FF {{len}} avec len<$FFFE => texte UTF-16 de longueur len

{len} est la longueur du texte sur 1 octet
{{len}} est la longueur du texte sur 2 octets - donc toujours précédée du code $FF
Le code FF FE FF signifie donc que le texte est en widechar, chaque caractère étant codé sur 2 octets.

4 commentaires:

Anonyme a dit…

Bonjour Paul,

Je vous contacte car je me retrouve face à un problème de fichier .scn. J'utilise sur mon poste Pinnacle Studio 10 dans lequel j'ai ouvert des mpg et découpé mes propres scènes. Cependant sur un autre poste j'ai la version Studio 11 et je m'aperçois qu'il ne lit pas correctement les fichiers scn de la version 10. En les ouvrant avec un éditeur hexa, j'ai une entête :

63 26 01 00 04 00 00 00 ff ff 03 00 0a 00 53 6f
75 72 63 65 54 61 70 65 ff fe ff 29 44 00 3a 00
5c 00 46 00 69 00 6c 00 6d 00 73 00 20 00 66 00
61 00 6d 00 69 00 6c 00 6c 00 65 00 5c 00 42 00
6f 00 6d 00 70 00 61 00 73 00 20 00 2d 00 20 00
50 00 e2 00 71 00 75 00 65 00 73 00 20 00 32 00
30 00 30 00 33 00 2e 00 6d 00 70 00 67 00 00 00
00 00 00 00 00 00 3a 00 ff ff 01 00 04 00 43 6c
69 70 50 00 00 00 ff ff 01 00 05 00 53 63 65 6e
65 ff fe ff 00 00 00 00 00 1b 00 00 00 00 00 00
00 01 80 ff fe ff 29 44 00 3a 00 5c 00 46 00 69
00 6c 00 6d 00 73 00 20 00 66 00 61 00 6d 00 69
00 6c 00 6c 00 65 00 5c 00 42 00 6f 00 6d 00 70
00 61 00 73 00 20 00 2d 00 20 00 50 00 e2 00 71
00 75 00 65 00 73 00 20 00 32 00 30 00 30 00 33
00 2e 00 6d 00 70 00 67

A priori j'ai des "00" partous en trop ? Pouvez-vous m'éclairer ?

Merci.

Cordialement

Paul Glagla a dit…

A première vue, la structure de ton fichier est correcte, conforme à la structure que je décris.

Dans le détail:

63 26 01 00 04 00 00 00 ff ff 03 00 0a 00 53 6f 75 72 63 65 54 61 70 65
est la structure jusqu'à SourceTape

puis on trouve
ff fe ff 29
qui annonce un nom de fichier complet de $29=41 caractères en UTF-16, c'est pourquoi chaque caractère est codé sur 2 octets avec un 0 ajouté.

On y lit alors un nom de fichier qui s'appellerait:

"D:\Films fampas - Pâques 2003.mpg"
C'est peut-être là qu'il y a un problème, car ce nom de fichier ne fait que 33 caractères et il en manque 8?!

Ensuite tout continue normalement avec 8 caractères 00 et le nombre de scènes qui est $3a=58,

puis les derniers octets de l'en-tête:
ff ff 01 00 04 00 43 6c
69 70 50 00 00 00 ff ff

qui indiquent au passage que les scènes à venir sont codées sans indication de titre ni d'imagette.

En réalité, le nom du fichier est répété, cette fois correctement avec les 41 caractères dans la scène 1, où on lit:
"D:\Films famille\Bompas - Pâques 2003.mpg"

Sauf si tu as oublié de recopier les 8 caractères dans ton post, il y aurait donc un pataquès dans le 1er nom de fichier qui serait pollué. Peut-être qu'avec ton éditeur hex tu peux essayer de rajouter les 8x2 caractères manquants:
69 00 6c 00 6c 00 65 00 5c 00 42 00 6f 00 6d 00
au bon endroit: après le 61 00 6d 00 de la quatrième ligne des octets de ton post.

Si c'est juste une omission de recopie, alors il faut chercher autre chose. Je ne sais pas si le format scn de Studio 11 a changé par rapport à Studio 10. Cela me paraitrait étonnant pour la compatibilité de ceux qui mettent à niveau.

Unknown a dit…

Bonjour,

je viens de passer d'une Canon miniDV (2002, cassee) a une Samsung VP MX-20 avec SD/MMC. La qualite d'immage est tres bonne mais le support fichier sur MMC (container .MP4, format PAL SD 16:9 H.264/AAC interlaced) ne marche pas bien.

Avec Studio12 j'ai duex problemes:

(1) chaque fichier .MP4 est reconnu comme 4:3 au lieu de 16:9

(2) gros probleme d'interlace. Immages avec lignes horizontales tres visibles

Le pb 1 est de resolution facile, une fois passe du mode fichier au mode scene, je peux selectionner ratio 16:9. Mais il faut le faire pour chaque fichier...

Le pb 2 est impossible a resoudre avec Pinnacle, apparement.

Le cameoscope est livre avec un logiciel Cyberlink Mediashow 4. Avec ceci, le fichier MPEG2/DVD genere est parfait. En 16:9 et avec un tres bonne rendu interlace une fois sur DVD (ou disque dur avec sortie video).

Donc, ma conclusion est que le fichier .MP4 du cameoscope est de bonne qualite mais il y a les flags widescreen et interlaced qui ne sont pas actives.

Ma comprension est que sans le flag interlaced Pinnacle12 fais pire. Il ouvre le fichier comme progressif et essaie de reconstruire une sortie interlaced.

Comment forcer le flag interlaced?

J'ai compare le fichier .MP4 dans le SDMMC et le fichier .MP4 importe par Cyberlink par USB dans mon disque. Ces sont les memes. Donc, Cyberlink sais forcer ce qui est mal code dans le header du fichier.

J'espeire de pouvoir faire le meme avec Pinnacle...

Avez-vous des idees?

merci beaucoup

Unknown a dit…

J'ai verifie que le passage 4:3 -> 16:9 est bien code dans les fichiers SCN. Pour l'entete et pour chaque scene un octet 00 devient 10 (en hexa ca fait 16 decimale!).

J'espeire que le meme peut etre fait pour le interlaced...

salutations

Andrea