FourCC (「4 文字コード」) は、データ形式を一意に識別するために使用される 4 バイト (通常は ASCII ) のシーケンスです。これは、クラシックMac OSで使用されていた OSType または ResType メタデータ システムに由来し、 Amiga / Electronic Arts Interchange File Format および派生製品に採用されました。このアイデアは、後にQuickTimeおよびDirectShowで圧縮データ タイプを識別するために再利用されました。
歴史
1984年、Macintosh OSの最も初期のバージョンであるSystem 1がリリースされました。System 1は、ファイルタイプ、作成者(アプリケーション)情報、および追加リソースを保存するためのフォークを含むメタデータフィールドを備えたシングルレベルのMacintoshファイルシステムを使用していました。データ自体を変更せずにこの情報を変更できるため、異なる解釈が可能でした。システム全体で、あらゆる種類のデータのタイプタグとして同一のコードが使用されました。[1] [2]
1985年、エレクトロニック・アーツは、もともとAmigaで使用するために考案されたInterchange File Format (IFF)メタフォーマット(ファイルフォーマットのファミリー)を導入しました。これらのファイルは、任意のデータを含むことができる一連の「チャンク」で構成され、各チャンクの先頭には4バイトのIDが付けられています。IFF仕様では、FourCCのアイデアの起源はAppleにあると明示的に言及されています。[3]
この IFF は、AppleのAIFFファイルやMicrosoftのRIFFファイル ( AVIおよびWAVファイル形式の基礎として使用) など、多くの開発者によって採用されました。Apple はこれらのコードの多くをOSTypesと呼んでいました。Microsoft およびWindows の開発者は、4 バイトの識別子をFourCCまたはFour-Character Codesと呼んでいます。FourCC コードは、Microsoft によっても採用され、 DirectX 、特に DirectShow および DirectX Graphicsで使用されるデータ形式を識別していました。
Appleシステムでは
Mac OS X Panther以降、OSType 署名は、 Uniform Type Identifier を決定するために調べられるいくつかのソースの 1 つであり、主要なデータ タイプ署名としては使用されなくなりました。Mac OS X (macOS) では、ファイル名拡張子を使用してファイル タイプをラベル付けする、より口語的な慣例が好まれます。この変更の時点では、古いユーザーの間でこの変更は大きな論争の種となり、Apple はファイル名の メタデータを誤って配置するより原始的な方法に戻っていると考えた人たちがいました。
ファイルシステムに関連付けられたタイプコードは、ユーザーが簡単に操作できるものではありませんが、特定のソフトウェア、特に開発者ツールの一部として/Developer/ToolsにインストールされるmacOSコマンドラインツールのGetFileInfoとSetFile、または古いMacで利用可能なResEditユーティリティを使用して表示および変更することができます。 [4] [5]
技術的な詳細
バイトシーケンスは通常、ASCII 印刷可能文字に制限され、スペース文字は短いシーケンスを埋めるために予約されています。ファイル拡張子とは異なり、大文字と小文字の区別は保持されます。FourCC は 16 進数でエンコードされる場合があり (例: ' avc1 'の場合は "0x31637661" ) [6] [7] [8]、人間が読める形式でエンコードされる場合もあります (例: " mp4a ")。ただし、一部の FourCC には印刷不可能な文字が含まれており、表示用に特別なフォーマットを行わないと人間が読むことはできません。たとえば、10 ビットY'CbCr 4:2:2ビデオの FourCC は ('Y', '3', 10, 10) [9]となり、ffmpegでは と表示されますrawvideo (Y3[10] [10] / 0x0A0A3359), yuv422p10le。
4 バイトの識別子は、人間が読める 4 つの文字で構成でき、ニーモニック特性を持ちながら、32 ビットシステムの整数に通常割り当てられる 4 バイトのメモリ空間に収まるため便利です (ただし、エンディアンの問題により、読みにくくなる場合があります)。したがって、コードはプログラム コード内で整数として効率的に使用できるだけでなく、検査時にバイナリ データ ストリーム内で手がかりを与えることもできます。
コンパイラサポート
FourCC は、基礎となる ASCII 文字シーケンスを基準にしてビッグ エンディアンで記述されるため、文字列として読み取られたときに正しいバイト順で表示されます。GCC を含む多くの C コンパイラは、最下位バイトに右揃えする複数文字リテラル'1234'の動作を定義しているため、ASCII では になります。[10]これは、Mac OS プログラマが OSType に使用する FourCC コードの従来の記述方法です。(従来の Mac OS はビッグ エンディアンのみでした。)
0x31323334
リトルエンディアンのマシンでは、結果を正しくするためには値のバイトスワップが必要です。上記の avc1 の例を見てみましょう。リテラル'avc1' はすでに整数値0x61766331に変換されていますが、リトルエンディアンのマシンではバイト順序が逆転し、値が31 63 76 61として保存されます。正しいバイトシーケンス61 76 63 31を生成するには、事前にスワップされた値0x31637661が使用されます。
一般的な用途
FourCC の最もよく知られた用途の 1 つは、AVI ファイル内のビデオ コーデックまたはビデオ コーディング形式を識別することです。一般的な識別子には、 DIVX、XVID、およびH264があります。オーディオ コーディング形式の場合、AVI ファイルと WAV ファイルでは、通常16 進数で記述される 2 バイトの識別子が使用されます ( MP3の場合は0055など)。QuickTime ファイルでは、これらの 2 バイトの識別子の前に文字 "ms" が付けられ、4 文字のコードが形成されます。RealMediaファイルでも 4 文字のコードが使用されますが、実際に使用されるコードは AVI ファイルや QuickTime ファイルで使用されるコードとは異なります。
4 バイト ID の概念を重要視するその他のファイル形式としては、標準 MIDI ファイル (SMF)形式、PNG画像ファイル形式、3DS (3D Studio Max) メッシュ ファイル形式、ICCプロファイル形式などがあります。
4 文字のコードは、ファイル形式以外のアプリケーションでも使用されます。次に例を示します。
- ACPI IDレジストリのベンダー向けUEFIフォーラム[11]
- ACPI仕様では、ACPIソース言語(ASL)で4文字の識別子を定義しています。
- Synopsys は IP のレジスタを介してコンポーネント ID を伝えます (DesignWare コレクション)
OSTypes のその他の用途は次のとおりです。
- AppleEventsのレコードフィールドID、イベントタイプおよびクラスIDとして
- コンポーネントマネージャでコンポーネントを識別するため
- QuickTimeムービーおよび画像ファイル形式の「アトム」IDとして
- フォルダマネージャで標準フォルダを識別するためのローカリゼーションに依存しない方法として
- QuickDraw GXでは、これらは gxTag タイプとして使用され、コレクション マネージャーのコレクション アイテムのタイプとしても使用されました。
- Apple API の列挙定数 (整数として、ホストのエンディアン)
- QuickTimeなどの特定のライブラリの「OSStatus」エラーコード(整数、ホストエンディアン)[12]
参照
参考文献
- ^ タイプ/クリエイターデータベース
- ^ 「Macintosh ファイルの署名」。Logiciels & Services Duhem。2015年12 月 1 日閲覧。
- ^ Morrison, Jerry (1985 年 1 月 14 日)。「EA IFF 85 交換形式ファイルの標準」。エレクトロニック アーツ。
- ^ 「GetFileInfo」、Darwin リファレンス (man ページ)、Apple
- ^ 「SetFile」、Darwin リファレンス (man ページ)、Apple
- ^ online-metadata.com. 「コーデックタグとは?」.コーデックタグとは? . 2019年6月9日閲覧。
- ^ “git.videolan.org Git - ffmpeg.git/blob - libavformat/isom.c”. git.videolan.org . 2019年6月9日閲覧。
- ^ 「FFmpeg/FFmpeg 検索」。GitHub。2019年6月 9 日閲覧。
- ^ 「FFmpeg: libavcodec/raw.c ソースファイル」. ffmpeg.org . 2019年6月9日閲覧。
- ^ 「C プリプロセッサ: 実装定義の動作」gcc.gnu.org。
- ^ 「ACPI ID レジストリ」。uefi.org。
- ^ 「OSStatus — Apple API エラー」。www.osstatus.com。
一般的な参考文献
- ISOBMFF 規格群の公式登録機関
- Fleischman, E. (1998 年 6 月)。「RFC2361 - WAVE および AVI コーデック レジストリ」。Internet Assigned Numbers Authority (IANA)。
- 「オーディオ サブタイプ GUID」。Microsoft。2017年2 月 23 日閲覧。
- Kroon, Dirk-Jan (2011 年 2 月 16 日)。「ビデオ コーデックの一覧、FourCC」。MathWorks ( 2010 年 9 月 13 日発行)。
この関数 GETFOURCC は、現在の Windows インストールで使用可能なビデオ エンコーダ コーデックの一覧を表示します。
