Final Cut Pro XでWAVファイルにロールを自動割り当てする機能の仕様を特定した

概要

Final Cut Pro Xには、オーディオファイルを読み込んだ時に、オーディオロールを自動的に設定する機能があります。

なのですが、その仕様の詳細がよくわからなかった。

このたび、試行錯誤の末、なんとか動作する仕様を特定したので、
まとめておきます。

Final Cut Pro X: オーディオレーンを使ってタイムラインを整理する https://support.apple.com/kb/PH12652

Final Cut Pro X: 読み込み時に割り当てられるオーディオロールを設定する https://support.apple.com/kb/PH26179


特定した仕様

iXML Chunkの構造

まず、iXML Chunkの定義。
次のようなChunkの構造を、wavファイルの最後に突っ込む。
wavファイルに含まれるRIFF Chunkにはファイルサイズの項目があるから、既存のwavファイルにiXML Chunkを追加する時は、そちらのサイズも増やさないとダメです。

bytes 定義 入れるデータ
1-4 Chunk ID iXML
5-8 Chunk Size iXML Chunkの長さ
9- iXML Meta Data iXMLメタデータ


iXMLメタデータ

Final Cut Pro Xで動作する、最小のiXMLメタデータの定義は次の通りです。
BWFXML/TRACK_LIST/TRACK/NAMEの位置(audio role nameと入っている場所)で、自動割り当てしたいオーディオロール名を指定します。
("&"、"<"、">"を値に使う場合はエスケープが必要。)

<?xml version="1.0" encoding="UTF-8"?>
<BWFXML>
    <IXML_VERSION>1.27</IXML_VERSION>
    <TRACK_LIST>
        <TRACK_COUNT>1</TRACK_COUNT>
        <TRACK>
            <CHANNEL_INDEX>1</CHANNEL_INDEX>
            <INTERLEAVE_INDEX>1</INTERLEAVE_INDEX>
            <NAME>audio role name</NAME>
        </TRACK>
    </TRACK_LIST>
</BWFXML>


拡張子

確認した限りでは、ファイルの拡張子は.wavでないと動作しない。
正直、別の拡張子を当てたかった(-_-;)
.bwfとか。


割り当てられるオーディオロール

ドラッグアンドドロップで、wavファイルをインポートする場合、
audio subroleはiXMLチャンクで指定できますが、親のオーディオロールは
指定できない(断言)
デフォルトでは、ダイアログ(dialogue)の子ロールに割り当てられてしまう。


これを変えたい場合は、

  • メディアの読み込み機能からインポート時にロールを指定するか、
  • 環境設定でデフォルトで割り当てるロールを変更する、と良い。


ロールの編集で、ロールをドラッグすると、ロールどうしをマージできるので、
一度、取り込んでから、正しいロールに統合するのでも良いとは思います。
でも、一時でも、ダイアログ(dialogue)に割り当てられちゃうと面倒くさい使いづらい


その他、やったこと

まず、npmモジュールを作ってみた

npmモジュールを作った。
このFinal Cut Pro X用の、iXMLチャンクをwavファイルに追加できる。 https://www.npmjs.com/package/fcpx-audio-role-encoder


フォルダアクションでwavファイルを変換

作ったnpmモジュールを利用して、
wavファイルを変換するAutoMatorのアクションと、
フォルダに入れられたwavファイルを変換処理するフォルダアクションを作った。
https://github.com/taku-o/fcpx-audio-role-workflow


これで、フォルダに音声ファイルを突っ込むだけで、
ファイル名のパターンに従って、
オーディオロールが自動設定されるようになったのである。
めでたしめでたし。


なんだか、めずらしく役に立つ話、した気がする!!!