「DVD-RAMのIFOファイル」の編集履歴(バックアップ)一覧はこちら
「DVD-RAMのIFOファイル」(2007/03/28 (水) 21:40:51) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
タイトルとクリップの紐付け情報が記録されていると思われるIFOファイルの構造を調べてみるために、DVD-RAMのIFOファイル(VR_MANGR.IFO)を見る。
この構造は、DVD-VR(DVD Video Recording Format)仕様のものだと思われる。しかし、DVD-VRの仕様書を見つける事が出来なかったので、地道に色々なデータを書き込んで検証する事に…。
とりあえず、色々な形式のIFOファイルの資料を見ていると、IFOファイルの内部は、複数のデータブロックの寄せ集めらしい事が分った。
また、これらのデータブロックに対するアドレス指定が、ヘッダの中に記述されているらしい事も。
と言う事で、以下のブロックがあると思われる(当然のことながら正式名称は不明)
-ヘッダ
-プレイリスト
-クリップリスト
-不明1
-タイトルリスト
-ベンダ情報
※これらのブロック中の数値はBig Endian
**ヘッダ
| 位置 |長さ| 内容 |
| 0000 | 0C | 識別子('DVD_RTR_VMG0') |
| 000C | 04 | このIFOファイルの終端位置(= ファイル長 - 1) |
| 0010 | 04 | 「プレイリスト」ブロックの終端位置(ここまでが、本来のIFOブロックなのか?) |
| 006C | 04 | ディスク番号? |
| 00A2 | 3D | ディスクタイトル |
| 0100 | 04 | 「クリップリスト」ブロックの開始位置 |
| 0104 | 04 | 「不明1」ブロックの開始位置 |
| 0130 | 04 | 「タイトルリスト」ブロックの開始位置 |
| 0164 | 04 | 「ベンダ情報」ブロックの開始位置 |
**プレイリスト
ヘッダ中に、このブロックの開始位置を示す数値は見当たらず、ファイルの先頭から0x200の位置から始まる。
したがって、このブロックは、ヘッダの一部と解釈するほうが正しいのかも。
| 位置 |長さ| 内容 |
| 0000 | 04 | 有効フラグ? (1: プレイリストあり、0: プレイリストなし) |
| 0004 | 04 | このブロックの長さ相対的な終端位置(= ブロック長 - 1) |
プレイリストが存在しない場合、「00 00 00 00 00 00 00 07」の8バイトのバイト列となる。
**クリップリスト
| 位置 |長さ| 内容 |
| 0000 | 04 | フラグ?(0x00000101) |
| 0004 | 04 | このブロックの長さ相対的な終端位置(= ブロック長 - 1) |
| 0008 | 3C | 不明なデータ列 |
| 0044 | 02 | クリップ数 |
| 0046 | 04*クリップ数 | クリップ情報への相対位置配列 |
***クリップ情報
| 位置 |長さ| 内容 |
| 0000 | 02 | 0固定?(世界時、地方時識別フラグ?) |
| 0002 | 05 | 日時情報(*) |
| 0007 | 02 | 音声モード |
| 0009 | 06 | 再生開始タイムスタンプ(*SCR) |
| 000F | 06 | 再生終了タイムスタンプ(*SCR) |
| 001D | 04 | ストリームのセクタ位置 |
| 0021 | ?? | 不明 |
※日時情報は、5バイトの値を、b39-b26:年 b25-b22:月 b21-b17:日 b18-b12:時 b11-b06:分 b05-b00:秒として表現したもの
※SCRは、0x00からの4バイト整数値 * 300 + 0x04からの2バイト整数値で表される27MHzのタイムスタンプ
**不明1
ヘッダの0x0104で指し示されたアドレスからのデータが、「00 00 00 00 00 00 00 07」となっているので、プレイリストブロックの先頭8バイトと同じ構造と思われる。
| 位置 |長さ| 内容 |
| 0000 | 04 | 有効フラグ? (0: 無効) |
| 0004 | 04 | このブロックの長さ相対的な終端位置(= ブロック長 - 1) |
**タイトルリスト
| 位置 |長さ| 内容 |
| 0000 | 02 | タイトル数 |
| 0002 | 02 | クリップ数 |
| 0004 | 8E * タイトル数 | タイトルの情報 * タイトル数 |
| 0004 + 8E * タイトル数 | 4 * クリップ数 | タイトルクリップ情報への相対位置配列 |
***タイトル情報
| 位置 |長さ| 内容 |
| 0000 | 04 | このタイトルに含まれるクリップ数 |
| 0004 | 40 | 記録日時や、ビットレートなどの情報 |
| 0044 | 40 | タイトル名(シフトJIS) |
| 0084 | 04 | タイトルサムネイルのフレームが含まれるクリップ番号 |
| 0088 | 08 | タイトルサムネイルのフレームのタイムスタンプ |
***タイトルクリップ情報
''この情報は、クリップリストのクリップ情報とは異なる''
| 位置 |長さ| 内容 |
| 0000 | 04 | クリップ番号(1~) |
| 0004 | 02 | このクリップに含まれるチャプタ数 |
| 0006 | 06 | 再生開始タイムスタンプ(*SCR) |
| 000C | 06 | 再生終了タイムスタンプ(*SCR) |
| 0012 | any | チャプタ情報の配列 |
***チャプタ情報
| 位置 |長さ| 内容 |
| 0000 | 01 | チャプタ情報文字列の長さ(未定義の場合0) |
| 0001 | 06 | チャプタ位置のタイムスタンプ(*SCR) |
| 0007 | チャプタ情報文字列の長さ | チャプタタイトル |
| 0007 + チャプタ情報文字列の長さ | チャプタ情報文字列の長さ | チャプタの詳細 |
ということらしい。
タイトルとクリップの紐付け情報が記録されていると思われるIFOファイルの構造を調べてみるために、DVD-RAMのIFOファイル(VR_MANGR.IFO)を見る。
この構造は、DVD-VR(DVD Video Recording Format)仕様のものだと思われる。しかし、DVD-VRの仕様書を見つける事が出来なかったので、地道に色々なデータを書き込んで検証する事に…。
とりあえず、色々な形式のIFOファイルの資料を見ていると、IFOファイルの内部は、複数のデータブロックの寄せ集めらしい事が分った。
また、これらのデータブロックに対するアドレス指定が、ヘッダの中に記述されているらしい事も。
と言う事で、以下のブロックがあると思われる(当然のことながら正式名称は不明)
-ヘッダ
-プレイリスト
-クリップリスト
-不明1
-タイトルリスト
-ベンダ情報
※これらのブロック中の数値はBig Endian
**ヘッダ
| 位置 |長さ| 内容 |
| 0000 | 0C | 識別子('DVD_RTR_VMG0') |
| 000C | 04 | このIFOファイルの終端位置(= ファイル長 - 1) |
| 0010 | 04 | 「プレイリスト」ブロックの終端位置(ここまでが、本来のIFOブロックなのか?) |
| 006C | 04 | ディスク番号? |
| 00A2 | 3D | ディスクタイトル |
| 0100 | 04 | 「クリップリスト」ブロックの開始位置 |
| 0104 | 04 | 「不明1」ブロックの開始位置 |
| 0130 | 04 | 「タイトルリスト」ブロックの開始位置 |
| 0164 | 04 | 「ベンダ情報」ブロックの開始位置 |
**プレイリスト
ヘッダ中に、このブロックの開始位置を示す数値は見当たらず、ファイルの先頭から0x200の位置から始まる。
したがって、このブロックは、ヘッダの一部と解釈するほうが正しいのかも。
| 位置 |長さ| 内容 |
| 0000 | 04 | 有効フラグ? (1: プレイリストあり、0: プレイリストなし) |
| 0004 | 04 | このブロックの長さ相対的な終端位置(= ブロック長 - 1) |
プレイリストが存在しない場合、「00 00 00 00 00 00 00 07」の8バイトのバイト列となる。
**クリップリスト
| 位置 |長さ| 内容 |
| 0000 | 04 | フラグ?(0x00000101) |
| 0004 | 04 | このブロックの長さ相対的な終端位置(= ブロック長 - 1) |
| 0008 | 3C | 不明なデータ列 |
| 0044 | 02 | クリップ数 |
| 0046 | 04 * クリップ数 | クリップ情報への相対位置配列 |
***クリップ情報
| 位置 |長さ| 内容 |
| 0000 | 02 | 0固定?(世界時、地方時識別フラグ?) |
| 0002 | 05 | 日時情報(*) |
| 0007 | 02 | 音声モード |
| 0009 | 06 | 再生開始タイムスタンプ(*SCR) |
| 000F | 06 | 再生終了タイムスタンプ(*SCR) |
| 001D | 04 | ストリームのセクタ位置 |
| 0021 | ?? | 不明 |
※日時情報は、5バイトの値を、b39-b26:年 b25-b22:月 b21-b17:日 b18-b12:時 b11-b06:分 b05-b00:秒として表現したもの
※SCRは、0x00からの4バイト整数値 * 300 + 0x04からの2バイト整数値で表される27MHzのタイムスタンプ
**不明1
ヘッダの0x0104で指し示されたアドレスからのデータが、「00 00 00 00 00 00 00 07」となっているので、プレイリストブロックの先頭8バイトと同じ構造と思われる。
| 位置 |長さ| 内容 |
| 0000 | 04 | 有効フラグ? (0: 無効) |
| 0004 | 04 | このブロックの長さ相対的な終端位置(= ブロック長 - 1) |
**タイトルリスト
| 位置 |長さ| 内容 |
| 0000 | 02 | タイトル数 |
| 0002 | 02 | クリップ数 |
| 0004 | 8E * タイトル数 | タイトルの情報 * タイトル数 |
| 0004 + 8E * タイトル数 | 4 * クリップ数 | タイトルクリップ情報への相対位置配列 |
***タイトル情報
| 位置 |長さ| 内容 |
| 0000 | 04 | このタイトルに含まれるクリップ数 |
| 0004 | 40 | 記録日時や、ビットレートなどの情報 |
| 0044 | 40 | タイトル名(シフトJIS) |
| 0084 | 04 | タイトルサムネイルのフレームが含まれるクリップ番号 |
| 0088 | 08 | タイトルサムネイルのフレームのタイムスタンプ |
***タイトルクリップ情報
''この情報は、クリップリストのクリップ情報とは異なる''
| 位置 |長さ| 内容 |
| 0000 | 04 | クリップ番号(1~) |
| 0004 | 02 | このクリップに含まれるチャプタ数 |
| 0006 | 06 | 再生開始タイムスタンプ(*SCR) |
| 000C | 06 | 再生終了タイムスタンプ(*SCR) |
| 0012 | any | チャプタ情報の配列 |
***チャプタ情報
| 位置 |長さ| 内容 |
| 0000 | 01 | チャプタ情報文字列の長さ(未定義の場合0) |
| 0001 | 06 | チャプタ位置のタイムスタンプ(*SCR) |
| 0007 | チャプタ情報文字列の長さ | チャプタタイトル |
| 0007 + チャプタ情報文字列の長さ | チャプタ情報文字列の長さ | チャプタの詳細 |
ということらしい。