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ファイル用に採用するなど、多くの開発者によって採用されました(RIFF ファイルは、 AVIおよびWAVファイル形式の基礎として使用されました)。Apple は、これらのコードの多くをOSTypesと呼んでいました。Microsoft およびWindows の開発者は、4 バイトの識別子をFourCCsまたはFour-Character Codesと呼んでいます。FourCC コードは、Microsoft によってDirectX、特に DirectShow および DirectX Graphics 内で使用されるデータ形式を識別するためにも採用されました。
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 コンパイラは、複数文字リテラルの動作として最下位バイトに右揃えを定義しているため、 ASCII では次の'1234'ようになります。[ 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文字のコードは以下のような用途で使用されます。
OSTypesのその他の用途としては、以下のようなものがあります。
この関数GETFOURCCは、現在のWindowsインストール環境で使用可能なビデオエンコーダー/コーデックの一覧を表示します。