Canopus DV Raptor 付属ソフト Raptor Video の プレイリストファイルについて




目的
プレイリストの各項目の間にブランク映像を入れる.

今日からCMをフレーム単位で編集することにしました.
それでテープに書き出す際にCMとCMの間にブランク映像が入れたかったんです.
 その理由としては,ブランクを入れとけば,あとでキャプチャーしてからの切りだしを
自動的に行なうことができると思われます.
 ブランク入れないと,せっかくカット編集した労力が報われないじゃん.


プレイリストファイル (*.pls)の解析

とある サンプルをダンプしてみたものです.

00000000  00 01 00 00 7e 00 00 00  80 bb 00 00 16 44 3a 5c  |....~....サ...D:\|
00000010  30 34 32 38 5c 63 61 70  74 75 72 65 35 30 37 2e  |0428\capture507.|
00000020  61 76 69 11 00 00 00 9a  03 00 00 16 44 3a 5c 30  |avi.........D:\0|
00000030  34 32 38 5c 63 61 70 74  75 72 65 35 31 30 2e 61  |428\capture510.a|
00000040  76 69 11 00 00 00 d1 01  00 00 16 44 3a 5c 30 34  |vi....ム....D:\04|
00000050  32 38 5c 63 61 70 74 75  72 65 35 31 30 2e 61 76  |28\capture510.av|
00000060  69 d3 01 00 00 52 05 00  00 16 44 3a 5c 30 34 32  |iモ...R....D:\042|
00000070  38 5c 63 61 70 74 75 72  65 35 31 31 2e 61 76 69  |8\capture511.avi|
00000080  19 00 00 00 d7 01 00 00  16 44 3a 5c 30 34 32 38  |....ラ....D:\0428|
00000090  5c 63 61 70 74 75 72 65  35 31 31 2e 61 76 69 d9  |\capture511.aviル|
000000a0  01 00 00 99 03 00 00 16  44 3a 5c 30 34 32 38 5c  |........D:\0428\|
000000b0  63 61 70 74 75 72 65 35  31 32 2e 61 76 69 0c 00  |capture512.avi..|
.
.
00000f30  44 3a 5c 30 34 32 38 5c  63 61 70 74 75 72 65 36  |D:\0428\capture6|
00000f40  32 31 2e 61 76 69 c6 01  00 00 87 03 00 00        |21.aviニ.......|
00000f4e

0x00-0x0b がヘッダ. 
	0x04  0x7e(16進数) ->126(10進数) 項目数

ちなみに256個を超えるとこんな感じ
00000000  00 01 00 00 16 01 00 00  80 bb 00 00 0c 44 3a 5c  |.........皿..D:\|

	その他の内容はよく分からないけど,まぁ気にしない


0x0c-0x2a が一つの項目です.

	中身を推測してみますと以下になりました.

0x0c	+0x00		0x16(16進数)->22	ファイル名の長さ	
	+0x01 .. +0x16	D:\0428\capture507.avi	 ファイル名
	+0x17 .. +0x1a	0x11 0x00 0x00 0x00 ->0x11 (16進数)->17 (10進数)->00:00:00:17 IN点 
	+0x1b .. +0x1e	0x9a 0x03 0x00 0x00 ->0x39a(16進数)->922(10進数)->00:00:30:22 OUT点 


ドロップフレームの扱いとかどうなってるんでしょうか.
ちょっと気になりますが,今回の目的とは関係ないのでまぁいいや.


プログラム


#!/usr/bin/perl5
#
# Insert data Raptor Video Play List File
#
# eggman@ptie.org 2001.5.13

$BLANK = pack("H2", "0c") . "D:\\blank.avi". pack("H16", "0000000004000000");

read(STDIN, $buf, 4); 	
printf("%s", $buf);

read(STDIN, $buf, 1); 	
read(STDIN, $buf2, 1); 	

$tmp = unpack("C",$buf2)*256 + unpack("C",$buf) ;
$tmp = $tmp*2+1;


read(STDIN, $buf, 1); 	
read(STDIN, $buf2, 1); 	
$buf = $tmp%256;
$buf2 = $tmp/256;
printf("%s", pack("C",$buf ));
printf("%s", pack("C",$buf2 ));


read(STDIN, $buf, 7); 	
printf("%s", $buf);


printf("%s",$BLANK);

while(read(STDIN, $namelength, 1)){

	read(STDIN, $buf, unpack("C",$namelength)+8);

	printf("%s%s",$namelength,$buf);

	printf("%s",$BLANK);
}




#こんなヘッポコなプログラムを作るのにも1時間かかるようじゃだめだめですな.
#pack,unpackにはまりました.

#2001/05/29   項目数が127個までじゃたりないので,32767までOKなように変更しとく.


実行例

%  insert_pls.pl  < hoge.pls > hogege.pls

00000000  00 01 00 00 7e 00 00 00  80 bb 00 00 12 44 3a 5c  |....~......D:\|
00000010  62 6c 61 6e 6b 2e 61 76  69 00 00 00 00 05 00 00  |blank.avi.......|
00000020  00 16 44 3a 5c 30 34 32  38 5c 63 61 70 74 75 72  |..D:\0428\captur|
00000030  65 35 30 37 2e 61 76 69  11 00 00 00 9a 03 00 00  |e507.avi........|
00000040  12 44 3a 5c 62 6c 61 6e  6b 2e 61 76 69 00 00 00  |.D:\blank.avi...|
00000050  00 05 00 00 00 16 44 3a  5c 30 34 32 38 5c 63 61  |......D:\0428\ca|
00000060  70 74 75 72 65 35 31 30  2e 61 76 69 11 00 00 00  |pture510.avi....|
00000070  d1 01 00 00 12 44 3a 5c  62 6c 61 6e 6b 2e 61 76  |...D:\blank.av|
00000080  69 00 00 00 00 05 00 00  00 16 44 3a 5c 30 34 32  |i.........D:\042|
00000090  38 5c 63 61 70 74 75 72  65 35 31 30 2e 61 76 69  |8\capture510.avi|
.
.
.


今後の展開
 プレイリストファイルから自動的にMPEG等へのエンコードする方法の確立しときたいです.
 プレイリストファイルからTMPGencのプロジェクトファイルが生成できるようにすればいいです.

 最近はあんまり手間がかからなければ,動画をMPEGで保存しとくのもありなんじゃないかと
 思うようになりました.