目次
何らかのプロジェクトでやり取りを行う際に、実にさまざまなフォーマットでデータのやり取りを行うことがあるかと思います。
過去仕事をしている上で筆者が一番困ったのがフロッピーディスクのMIDIファイル救出。
そうです、もはや救出という名に相応しいですよね。
OMFファイルに関して言えば現在はAAF主流となっていますが、まだまだ現場では使われることがたまにある方式になります。
今回はデータフォーマットOMFを取り扱う方法。
実はこれ、やっかいなのがMacの方はLogicなどで読み込みは可能とされているのですが、実際はファイルが開けないケースがほとんどだったり、公式に対応しているというわけではないようです。
WAVEファイルの抽出
主な目的はオーディオデータの抽出ではないでしょうか?
OMFファイルで格納できるオーディオ形式は大きく分けて3種類になります。
✅ 対応フォーマットと特徴
Pythonで抽出コードを作成する際は、それぞれチャンク識別子を指定して、抽出しなければ取り出せません。
プロジェクトリーダーが制作したOMFデータで中のフォーマットが不明な場合は3種類すべて書き込んでOKです。
また、プログラム自体は、Pythonの標準ライブラリで抽出可能ですので、特別新しいライブラリーを入れる必要はありません。
Mac 抽出サンプルコード
#!/usr/bin/env python3
"""
OMFファイル内に埋め込まれた音声(WAV, AIFF, SD2)をすべて抽出するスクリプト
"""
import os
def extract_audio_chunks(omf_path, output_dir):
os.makedirs(output_dir, exist_ok=True)
with open(omf_path, "rb") as f:
data = f.read()
patterns = {
b"RIFF": ("wav", "little"),
b"FORM": ("aiff", "big"),
b"Sd2f": ("sd2", None) # SD2はサイズの取得が特殊、暫定対応
}
count = 0
for pattern, (ext, endian) in patterns.items():
print(f"\n🔍 チャンク検索: {pattern.decode()}")
start = 0
while True:
start = data.find(pattern, start)
if start == -1:
break
# SD2は長さ情報がないことが多いため暫定:300KBで仮カット
if pattern == b"Sd2f":
end = start + 300 * 1024
audio_data = data[start:end]
else:
# 長さ情報はチャンクの4バイト後
size_bytes = data[start + 4:start + 8]
if len(size_bytes) < 4:
break
size = int.from_bytes(size_bytes, byteorder=endian)
end = start + 8 + size
if end > len(data) or size < 44:
print(f"⚠️ 無効または破損した{ext.upper()}チャンクをスキップ(size={size})")
start += 4
continue
audio_data = data[start:end]
filename = f"extracted_{count}.{ext}"
out_path = os.path.join(output_dir, filename)
with open(out_path, "wb") as out_file:
out_file.write(audio_data)
print(f"✅ {filename} を保存しました({end - start}バイト)")
count += 1
start = end
if count == 0:
print("❌ いずれの音声フォーマットも検出できませんでした。")
else:
print(f"\n🎉 抽出完了:{count}個のファイルを保存しました。")
# 実行対象パスの指定(パスはユーザー環境に応じて変更)
if __name__ == "__main__":
omf_path = "OMFがあるパス名.omf"
output_dir = "ファイルを書き出したい場所のパス"
if not os.path.isfile(omf_path):
print(f"❌ OMFファイルが見つかりません:{omf_path}")
else:
print(f"🔎 読み込みファイル:{omf_path}")
print(f"💾 書き出し先フォルダ:{output_dir}")
extract_audio_chunks(omf_path, output_dir)Windowsでの抽出サンプルコード
✅ Windows対応ポイント
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
OMFファイルから埋め込み音声(WAV, AIFF, SD2)を抽出するWindows対応スクリプト
"""
import os
def extract_audio_chunks(omf_path, output_dir):
os.makedirs(output_dir, exist_ok=True)
with open(omf_path, "rb") as f:
data = f.read()
patterns = {
b"RIFF": ("wav", "little"),
b"FORM": ("aiff", "big"),
b"Sd2f": ("sd2", None) # SD2は構造が特殊、サイズは仮設定
}
count = 0
for pattern, (ext, endian) in patterns.items():
print(f"\n🔍 チャンク検索: {pattern.decode()}")
start = 0
while True:
start = data.find(pattern, start)
if start == -1:
break
if pattern == b"Sd2f":
end = start + 300 * 1024 # 仮に300KBで切る
audio_data = data[start:end]
else:
size_bytes = data[start + 4:start + 8]
if len(size_bytes) < 4:
break
size = int.from_bytes(size_bytes, byteorder=endian)
end = start + 8 + size
if end > len(data) or size < 44:
print(f"⚠️ 無効な{ext.upper()}チャンクをスキップ(size={size})")
start += 4
continue
audio_data = data[start:end]
filename = f"extracted_{count}.{ext}"
out_path = os.path.join(output_dir, filename)
with open(out_path, "wb") as out_file:
out_file.write(audio_data)
print(f"✅ 保存: {filename}({end - start}バイト)")
count += 1
start = end
if count == 0:
print("❌ 有効な音声チャンクは見つかりませんでした。")
else:
print(f"\n🎉 抽出完了:{count}個のファイルを保存しました。")
if __name__ == "__main__":
# Windows用のパス指定(raw文字列で記述)
omf_path = r"C:\Users\YourUsername\Downloads\AUDIO_REEL_OMF.omf"
output_dir = r"C:\Users\YourUsername\Downloads\OMF_OUTPUT"
if not os.path.isfile(omf_path):
print(f"❌ OMFファイルが見つかりません:{omf_path}")
else:
print(f"🔎 読み込みファイル:{omf_path}")
print(f"💾 書き出し先フォルダ:{output_dir}")
extract_audio_chunks(omf_path, output_dir)OMFで読み込めるソフトウェア一覧
OMFファイルとは何か?
OMF(Open Media Framework)ファイルとは、音声編集や映像編集において、複数のソフトウェア間で編集データと素材ファイルをやり取りするための「中間ファイル形式」です。
※ポストプロダクション(編集・ミックス)のために開発された業務用の中間データ形式
🔍 正式名称と概要
- 正式名称:Open Media Framework Interchange(OMFI)
- 開発元:Avid Technology社(1990年代)
- 拡張子:通常 .omf
- 目的:異なるソフト間で、タイムライン情報・オーディオ素材・クリップ構成を共有する
📦 OMFファイルに含まれるもの
🔄 OMFファイルの2つの種類
🎬 なぜOMFが重要なのか?
OMFは、ポストプロダクション(収録後の編集工程)において、音声と映像を別ソフトウェアで編集するプロ現場のニーズに応えるために生まれました。
例:
- 映像編集:Adobe Premiere、Final Cut Pro
- 音声編集:Pro Tools、Reaper、Logic Pro
映像編集ソフトで組んだタイムラインを、音声専門のソフトにそのまま引き渡して仕上げる(ミキシング・ノイズ除去など)ために不可欠です。
AAFとの違い(後継フォーマット)
📜 OMFの歴史:映像と音のプロの現場をつなぐための発明
🏭 開発者
- Avid Technology(アビッド・テクノロジー)米国のポストプロダクション機器・ソフトの専門企業 1987年設立
🕰 誕生時期
- 1991年頃業界初の「ノンリニア編集ソフト」Avid Media Composer の流通とともに登場 映像・音声をテープレスで編集できるようになり、ソフト間連携のための共通交換フォーマットが必要となった
🎯 開発目的
- 映像編集ソフトと音声編集ソフト間で、「タイムラインと素材を忠実に受け渡すための中間形式」を確立する
- 映像業界と音響業界の共通言語として生まれました。
🌐 OMFとポストプロダクションの実際の使われ方
例:テレビ番組の編集ワークフロー
- Premiereで映像編集(仮ミックス含む)
- OMFファイルを書き出してPro Toolsに渡す
- Pro Toolsで音響効果やノイズ除去、本格的なミックスを行う
- 最終的に映像と音声を再統合(マスタリング)



