素材¶
メディアプール内の音声ファイルがどう記録されているか、そして compose がテンプレートのメディアプール項目を指定ファイルに向け直すときに何を書くか。値は ffprobe で読みます。推測はせず、未対応のファイルは拒否します。
対応形式¶
| 入れ物 | ffprobe のコーデック |
ビット深度 | CodecName |
BitDepth |
Clip の field 18(形式フラグ) |
|---|---|---|---|---|---|
| WAV | pcm_s16le |
16 ビット | Linear PCM |
1 | 32768(0x8000) |
| WAV | pcm_s24le |
24 ビット | Linear PCM |
2 | 32768(0x8000) |
| WAV | pcm_f32le |
32 ビット浮動小数点 | Linear PCM |
3 | 32768(0x8000) |
| FLAC | flac |
16 ビット | FLAC |
1 | 32778(0x800A) |
| FLAC | flac |
24 ビット | FLAC |
2 | 32778(0x800A) |
| M4A | aac(プロファイル LC) |
— | AAC |
3 | 32772(0x8004) |
| MP3 | mp3 |
— | MP3 |
3 | 32776(0x8008) |
BitDepth:1=16 ビット、2=24 ビット、3=32 ビット浮動小数点。 圧縮形式は 3 で保存されます。- サンプリング周波数 44100 か 48000 Hz、1 か 2 チャンネル、音声ストリームはちょうど1つ。
- それ以外(ほかのコーデック、8/32 ビット整数 PCM、ほかの周波数、3チャンネル以上、動画ファイル)は拒否します。
メディアプール項目(Sm2MpAudioClip)¶
MediaPool/**/MpFolder.xml の中:
| 項目 | 符号化 | 内容 |
|---|---|---|
Name |
文字列 | ファイル名 |
UniqueMediaPoolItemId |
UUID | 項目の ID。compose が追加素材を足すたびに新しく振る |
Clip |
版つきブロブ、protobuf | ファイルの場所と形式(下記) |
TracksBA |
QDataStream | ストリームごとの音声の説明(下記) |
FieldsBlob |
版つきブロブ、protobuf | 埋め込み音声の情報(下記) |
EmbeddedAudioVec → BtAudioInfo |
XML | 埋め込み音声ストリームの記録(DbId はチャンネル割り当てから参照される) |
VirtualAudioTracksBA |
16進 | 仮想オーディオトラックの構成 |
Clip(protobuf)¶
| フィールド | 型 | 内容 |
|---|---|---|
| 1 | 文字列 | ファイルのフォルダ |
| 2 | 文字列 | ファイル名 |
| 3 | 文字列 | 更新日時、C の ctime 形式(Sun Oct 18 17:34:12 2026) |
| 5 | 文字列 | コーデック名(Linear PCM・FLAC・AAC・MP3) |
| 13 | varint | 更新日時、エポックからのマイクロ秒 |
| 15・16 | varint | 未解読(そのまま残す) |
| 18 | varint | 形式フラグ(上の表) |
TracksBA(QDataStream)¶
キーが1つ "0" の QVariantMap で、その QByteArray の値が最初の音声ストリームを表す入れ子の QVariantMap です。
| キー | 内容 |
|---|---|
UniqueId |
ストリームの ID |
DbType |
BtAudioTrack |
IdxTrack |
ストリーム番号(0) |
StartTime |
0.0 |
SampleRate |
Hz |
NumChannels |
1 か 2 |
Duration |
長さ(サンプル数) |
CodecName |
Clip の field 5 と同じ |
BitDepth |
1/2/3 |
ChannelLayout |
チャンネル配置。ffprobe が mono/stereo と報告したときにある |
FieldsBlob(protobuf)¶
field 1 → field 5 に埋め込み音声の情報があり、これも入れ子のマップを包んだキー1つの QVariantMap です。
| キー | 内容 |
|---|---|
MediaExtents |
リトルエンディアン double 2つ:0 と長さ(秒) |
CodecName |
コーデック名 |
SampleRate |
Hz。48000 のときは省略 |
BitDepth |
1/2。3 のときは省略(採取したすべての例で 32 ビットが既定) |
Type |
ステレオで 0、モノラルでは省略 |
ChannelVecBA |
チャンネル割り当て:{"0": {MediaRef}, "1": {MediaRef, ChannelIdx: 1}} のようにチャンネルごとに1つ。MediaRef=BtAudioInfo の DbId |
長さ¶
Duration(サンプル数)は、ストリームのduration_ts × time_base × 周波数(なければduration × 周波数)。- MP3:Resolve は
ffprobeのギャップレスの長さと違い、符号化された MP3 フレームをすべて数えるため、drpkit はパケットの長さを合計します。 - カット表の
source_outは、2つの長さ(保存する長さと再生できる中身)の短い方を超えてはなりません。
チャンネル数の変更¶
新しいファイルのチャンネル数がテンプレートの素材と違う(モノラル ↔ ステレオ)とき、compose は NumChannels・ChannelVecBA・Type と各クリップの VirtualAudioTrackBA(ChannelsBA=u32BE 2, 個数 + チャンネルごとに 0x4001 + i、AudioType はモノラル 1・ステレオ 0)も書き換えます。テンプレートが Resolve の既定のチャンネル割り当てのときだけで、そうでなければ拒否します。
1トラックに複数の素材¶
media を持つカットの行ごとに新しいメディアプール項目を作ります。トラックのテンプレート項目を新しい ID で複製し(項目の DbId、埋め込み BtAudioInfo の DbId=チャンネル割り当て内に UTF-16 で入っている箇所も改名、UniqueMediaPoolItemId)、そのファイルの情報で埋めます。同じファイルを2つのトラックで使うこと、2つのテンプレートトラックが1つのメディアプール項目を共有していることは拒否します。
検証¶
28通りすべて(WAV 16/24/32f、FLAC 16/24、AAC、MP3 × 44.1/48 kHz × モノラル/ステレオ)の素材情報を、同じファイルを Resolve 自身が書き出したもの(tests/compose/formats/)と項目ごとに照合しています。28通りを網羅する 56 本の合成プロジェクトを Resolve 21.1.1 に読み込み、全クリップが指定の位置・In 点・フェードで オンライン になり、両チャンネルで音が出ることを確認しました。