Scenes in DVdate

DVdate has a number of features that use the concept of scenes, that is, a portion of the video, filmed continuously. In DV videos, scene changes are detected by a jump of the datecode, that is, the date and time of shooting contained in each frame of the video. In the absence of a datecode, DVdate can also try to detect scene changes by “jumps” in the content of the image when two consecutive frames have significant differences.

All scene information is saved in a somewhat complicated scn extension file, created and used years ago by Pinnacle Studio. And when DVdate performs a function on the scenes, in fact it executes it based on the data from this file of extension scn, which has the same name as the video and is in the same folder.

This is the case when DVdate browses from scene to scene, when he splits a video into scenes (each scene in a separate file), or when he exports the list of scenes in a file (Microsoft Word, Excel or Libre Office) eventually with thumbnails.

Hence the importance of being able to correctly create the scn files and to read them again with care.

As a matter of fact, thanks to a DVdate user named Terry Goodall, I just realized that recent versions of DVdate had bugs in the process of creating scn files and processing them. Therefore all the functions based on the scenes could be wobbly, sometimes even crash the program.

Thanks to Terry’s efforts, who sent me several image files and even an excerpt from his video so that I could analyze what was wrong, I have been able to fix things and I think that the version 8.0.4 put online recently is now correct from this point of view.

For DVdate users who have created scn files and wonder if they are correct or not, there is a simple solution (but that will take a lot of time, so to run during night): it is to load in DVdate all available DV files, select them all, then launch the Scenes / Create scn file by date command. You may have to answer Yes to All to avoid being bothered by confirmation requests before overwriting existing files.

This brings me to emphasize once again how much I appreciate the feedback from users of my software, even when they are critical. I remind you that I am not a professional and that I do not have the means to do in-depth tests on all the cases that we can meet. So I rely on help from users to improve them. Do not hesitate to report issues on the forums or to send me an e-mail.

For geek’s information, I reproduce below what I know about SCN files (which I originally discovered with Pinnacle Sudio 8 in 2002).

A * .scn file begins with a header that in hexadecimal is:

63 26 01 00 04 00 00 00
FF FF 03 00
0A 00 ‘SourceTape’
[full name of the file]
00 00 00 00 00 00 00 00 (or 00 00 00 00 00 00 0C 00)
{{number of scenes}}

Then for the first scene:

FF FF 01 00
04 00 ‘Clip’
50 xx yy 00
FF FF 01 00
05 00 ‘Scene’
[comment_1]
(scene_1)
(length_1)
00 00 00 00 01 80
[filename]
00 00 00 00
00 00 00 00
(length_1)
<(image_1)> if (yy and $40)<>0
<[caption_1]> if (xx and $80)<>0

Then for each of the following scenes, noted scene_i (with i> = 2):

03 80 F0 xx yy 00 05 80
[comment_i]
(scene_i)
(length_i)
00 00 00 00 07 00
(scene_i)
(length_i)
(scene_i)
<(image_i)> if (yy and $40)<>0
<[titre_i]> if (xx and $80)<>0

Here my notation is:

{{number}}
is an integer number coded with 2 bytes

(scene_i)
is the number of the frame in the avi file where scene i starts. For example scene_1 is always 0. This number is an integer coded with 4 bytes.

(length_i)
is the length in number of frames, on 4 bytes, of scene i. Therefore (length_i)=(scene_i+1)-(scene_i)

<xxx> if condition
: means that element xxx is optional, and is only present if the condition is fullfilled

[text]
is a string of characters preceded by its length and possibly characters UTF code according to one of the following syntaxes::

00 is empty text
{len1} with len1<$FF is a UTF-8 text of length len1
FF {{len2}} with len2 <$ FFFE is a UTF-8 text of length len2
FF FE FF 00 is empty text
FF FE FF {len1} with len1 <$ FF is a UTF-16 text of length len1
FF FE FF FF {{len2}} with len2 <$ FFFE is a text UTF-16 of length len2
{len1} is the length of text on 1 byte
{{len2}} is the length of the text on 2 bytes – so always preceded by the code $ FF
The code
FF FE FF means that the text is in widechar, each character is 2-byte.

Add a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.