クリップと編集¶
drpkit read --edits が読み、drpkit compose が書く内容:クリップ、クリップ音量とフェード、キーフレーム、トランジション、クリップ色、クリップ内蔵FX、タイムラインマーカー。位置はすべてタイムラインのフレームレートでのフレーム数です。
| データ | .drp |
Project.db |
|---|---|---|
| クリップ・トランジション | SeqContainer/*.xml:Sm2TiAudioClip・Sm2TiTransition |
Sm2TiTrack 経由の Sm2TiItem |
| クリップ音量・フェード・キーフレーム | クリップの <EffectFiltersBA>(16進) |
Sm2TiItem.EffectFiltersBA |
| クリップ内蔵FX | クリップ自身の <FieldsBlob> |
Sm2TiItem.FieldsBlob |
| クリップ色 | project.xml:Sm2TiItemLockableBlob |
BtLockableBlob |
| タイムラインマーカー | project.xml:Sm2SequenceLockableBlob |
BtLockableBlob |
| タイムラインの開始 | Sm2Sequence/MediaExtents |
— |
| フレームレート | Sm2Timeline/FrameRate(double LE) |
—(フレームのみ) |
クリップの記録¶
| 項目 | 意味 |
|---|---|
Name |
クリップ名(オーディオでは素材のファイル名) |
Start |
クリップ先頭のタイムライン上のフレーム(整数) |
Duration |
整数|hex(double LE):整数フレームと、端数をリトルエンディアン double にした16進。例 16816|00009a999999e93f。単なる数値のこともある |
In |
クリップ先頭の素材上のフレーム。空なら 0 |
MediaRef |
メディアプール項目(Sm2MpAudioClip)の DbId |
MediaFilePath |
素材ファイルの絶対パス |
MediaTimemapBA |
02 + ビッグエンディアン double:素材の長さ − 1フレーム(秒)(compose が書く値) |
EffectFiltersBA |
クリップ音量・フェード・キーフレーム(下記) |
FieldsBlob |
クリップ内蔵FX(下記) |
VirtualAudioTrackBA |
クリップのチャンネル割り当て |
reader は end = start + duration、src_out = src_in + duration、start のタイムコード(.drp のみ)も出します。
クリップ音量とフェード:EffectFiltersBA¶
版つきブロブ(u32BE 2・u32BE 長さ・フラグ 0x80/0x81 zstd)で、中身は protobuf です。
field 1(繰り返し)= エフェクト
1: エフェクト種別(varint)
9(繰り返し)= パラメーター
1: パラメーター番号(varint)
3: { 1: { 2: double LE (単一の値)
7: ビッグエンディアン double の列 (カーブ点) } }
10: キーフレーム(バイト列、下記)
エフェクト種別 124 が「Fairlight Clip Volume and Fades」です。
| Effect type | 番号 | 名前 |
|---|---|---|
| 124 (Fairlight Clip Volume and Fades) | 95 | volume_db |
| 124 (Fairlight Clip Volume and Fades) | 97 | fade_in |
| 124 (Fairlight Clip Volume and Fades) | 98 | fade_out |
| 124 (Fairlight Clip Volume and Fades) | 99 | fade_in_curve |
| 124 (Fairlight Clip Volume and Fades) | 100 | fade_out_curve |
| 番号 | 意味 | 単位 |
|---|---|---|
| 95 | クリップ音量 | dB |
| 97/98 | フェードイン/フェードアウトの長さ | フレーム(double) |
| 99/100 | フェードイン/フェードアウトのカーブ点 | フェードのカーブ 参照 |
SetFades の 0/0・48/24・100/7 と、FCPXML のクリップ音量 −6 dB で確認。.drp を読み込み直しても値は残ります。注意:Project.ExportProject は最後に保存した状態を書き出します。SetFades の後は保存してから書き出してください。
音量キーフレーム¶
番号95(クリップ音量)のメッセージの field 10 に入ります。
フレームは素材のフレーム番号です(クリップ先頭=素材の In)。In が 144 のクリップで確認:素材の 24/48 に置いたキーではクリップ全体が最後の値、168/192 に置くとクリップの +1 秒/+2 秒で効いた。フラグは画面で付けたキーでは0x000C0000(補間の種類と思われる・未解読)。composeも同じ値を書きます。- 再生(書き出しで確認):キーの間は dB で直線補間、最初のキーより前は最初の値、最後より後は最後の値。
- 画面で作ったデータでは、単一の値(field 3)は最初のキーと同じ。
- 24 fps で画面で付けたキー:+20 秒 → 480、+25 秒 → 600、+30 秒12フレーム → 732、値 −3/−15/+6 dB。
フェードのカーブ¶
番号99(フェードイン)と100(フェードアウト)はカーブ点を1つ持ちます。field 7 にビッグエンディアンの double 2つ、**(位置 %、レベル 0.1 dB 単位)**です。
- 位置はフェード区間の先頭から測り、レベルはクリップ音量(番号95)に対する相対値。
- 直線のフェード(振幅が直線)では 99/100 に何も記録しない。
- 書き出した曲線は点をちょうど通る(位置 25/50/75/78 % で確認)。
- 点が 50 % のとき、曲線は直線フェードの dB 曲線の定数倍:
(50, −20)で 25/50/75 % の点が −0.8/−2.0/−4.0 dB(直線なら −2.5/−6.0/−12.0)。それ以外の位置では、両端と点の間の形はモデル化していません。 - reader の表示例:
Out カーブ点 位置49%で -2.0 dB・直線 -5.8 dB より上に凸。 composeが書くのは直線のフェードだけ。--keep-clip-fxで引き継いだカーブ点は消します。
FCPXML の fadeIn/fadeOut は、Resolve が読み込み時に無視します(クリップ音量だけが入る)。
トランジション¶
トラック上でクリップの間に置かれる Sm2TiTransition です。
| 項目 | 意味 |
|---|---|
PrettyType |
例 Cross Fade 0DB・Cross Fade +3dB・Cross Fade -3dB |
Start |
トランジション先頭のタイムライン上のフレーム |
Duration |
長さ(フレーム) |
AlignmentType |
下表。Position にも同じ値 |
AlignmentType |
意味 |
|---|---|
| 1 | starts at edit point (right) |
| 2 | centered on edit point |
| 3 | ends at edit point (left) |
(1=編集点から始まる、2=編集点が中央、3=編集点で終わる)
compose は Cross Fade 0DB を中央揃え(AlignmentType 2)で、つなぎ目の crossfade/2 フレーム前から書きます。トランジション本体(FieldsBlob)は Resolve 21.1.1 の書き出しから取った定数で、クリップへの参照は含みません。
クリップ色¶
色を付けたクリップごとに Sm2TiItemLockableBlob(.drp)/BtLockableBlob の行(Project.db)が1つあります。色がなければ記録はありません。
BlobOwner=クリップのDbId/Sm2TiItem_id。BlobData=00002711 00000003 80 28 <番号>:ロック可能ブロブの見出し、長さ 3、フラグ0x80、protobuf の field 5(0x28)=色番号。
| 保存コード | 色 |
|---|---|
2 (0x02) |
Green |
4 (0x04) |
Teal |
6 (0x06) |
Blue |
8 (0x08) |
Purple |
10 (0x0A) |
Pink |
12 (0x0C) |
Tan |
14 (0x0E) |
Brown |
16 (0x10) |
Apricot |
18 (0x12) |
Beige |
20 (0x14) |
Chocolate |
22 (0x16) |
Lime |
24 (0x18) |
Navy |
26 (0x1A) |
Olive |
28 (0x1C) |
Orange |
30 (0x1E) |
Violet |
32 (0x20) |
Yellow |
クリップ内蔵FX¶
クリップに設定した Voice Isolation と Dialogue Leveler は、クリップ自身の FieldsBlob にあります。
- 版つきブロブ(
u32BE 2・長さ・0x80/0x81zstd)、中身は protobuf - ASCII 文字列
FL::ClipFXの後ろに zlib ストリーム(78 9C …) - その中に、トラックと同じ形式のプラグイン記録:
bmd:<名前>:<ID>+ 64 バイトのパラメーター名 + float32 の正規化値。パラメーター名に::がないこともある(Dialogue Leveler のUI_…)
エフェクトを無効にすると記録そのものが消えるので、記録があれば有効です。API の SetVoiceIsolationState と SetProperty で確認。換算は プラグイン。compose はトラックの新しいクリップをすべて、テンプレートのそのトラックで最も早いクリップから作り、その FieldsBlob をそのまま写すので、クリップ内蔵FX は --keep-clip-fx の有無にかかわらず新しいクリップ全部に引き継がれます(このオプションが扱うのは EffectFiltersBA=クリップ音量・キーフレーム・ほかのエフェクト)。
タイムラインマーカー¶
マーカーのあるタイムラインごとに Sm2SequenceLockableBlob(.drp)/BtLockableBlob の行(Project.db)が1つあります。マーカーがなければ記録はありません。
BlobOwner=タイムラインのSm2SequenceのDbId。FieldsBlob=QVariantMap {BlobData}。BlobData=00002711・u32BE 長さ・0x80無圧縮/0x81zstd・protobuf。- protobuf の field 2 がマーカー一覧です(メッセージのほかのフィールドは
composeがそのまま残します)。
field 2(繰り返し)= マーカー
1: { 1: zigzag(フレーム) } タイムライン開始からのフレーム(0 のときは省略)
2: u32BE 2 | u32BE 長さ | {
1: {
1: 色ビット(varint)
3: メモ (文字列)
3: 長さ (フレーム数の10進文字列)
3: 名前 (文字列)
6: customData(文字列・任意)
} }
3つの field 3 は順にメモ・長さ・名前です。フレームはタイムライン開始から数え、Timeline.GetMarkers() の値と同じです。reader は絶対フレーム(offset + 開始フレーム、.drp のみ)も出します。
| 保存ビット | 色 |
|---|---|
2 (0x2) |
Blue |
4 (0x4) |
Cyan |
8 (0x8) |
Green |
16 (0x10) |
Yellow |
32 (0x20) |
Red |
64 (0x40) |
Pink |
128 (0x80) |
Purple |
512 (0x200) |
Fuchsia |
1024 (0x400) |
Rose |
2048 (0x800) |
Lavender |
4096 (0x1000) |
Sky |
8192 (0x2000) |
Mint |
16384 (0x4000) |
Lemon |
32768 (0x8000) |
Sand |
65536 (0x10000) |
Cocoa |
131072 (0x20000) |
Cream |
ビット 256 は使われていません。Timeline.AddMarker で作ったマーカー(16色すべて、長さ1〜24、日本語、XML 記号、customData)で確認し、API で作った4本の書き出しを符号化し直すとバイト単位で一致します。
タイムラインの開始¶
Sm2Sequence/MediaExtents はリトルエンディアン double 2つ:開始秒と長さ秒です。開始秒 × fps=Timeline.GetStartFrame()(読み込み後に 24 fps で 3600 秒 → 86400、0 → 0 を確認)。compose は最初と最後のカットに合わせて設定します。