[技術資料室] [フォーマット辞典]
[ネットワーク編]
[ハード部屋] [Linuxメモ]
[Javaメモ]
[Dev news]
[JPEG]
[MPEG] [Blu-ray Disc] [DV] [XML]
[QRコード]
[文字コード]
Last update
今、開発環境が寂しくないですか?
各種データやデバイス・開発言語・プロトコルのフォーマットやI/Oポートの使い方、などなど、開発者のための資料になるものを扱う予定です。
ここに掲載する情報も募集しています。(リンクも張ります)
誰が何を知りたくて読んでいるのかもわからないので、更新頻度は低いかもしれません。
文字コードもこちらでメモメモかな。
知りたい規格ありますか?
一覧 映像/動画系 [JPEG JFIF] |
などなど |
参考
昔はもっと沢山の画像や音声フォーマットがありましたが、ハードウェアが色数に依存しなくなってしまってからというもの、ビットデータ処理など、扱いにくくなってしまいました。
画像エフェクトをリアルタイム処理でこなそうとすると、どうしても画面モードに依存してしまいますからね。
Webの検索をしてみると、使う側から見た適当な解説しかしてないものがほとんどのようで、それでは悲しいので、せめて、元ネタや仕様の公開されているところへリンクだけでもしておこうと思います。
動画、静止画の圧縮に、4:2:0フォーマットや4:2:2フォーマットというのをよく見かけます。どういうものなのでしょう。
動画などでは、色をRGBではなく、Y,Cr,Cbの3つに分割して圧縮しています。このYとCr,Cbの比率が4:2:2 などだったりします。
で、4:2:0 は何なのかというと、フレームごとに 4:2:0 と 4:0:2 で記録していて、実質は 4:1:1 のものを片方のフレームを取ってそんなふうに呼んでいるようです。
フレームとフィールド
おなじみテレビ(NTSC)は、インターレス表示で、60回の走査で30画面分を作ってます。
1回で作る画面をフィールド、2つあわせて1画面になったものをフレームといいます。
参考
公開されているらしいぞ。
参考
Macromedia
翻訳するとき、余計な改行を消さないといけなかったり、データとしての保存価値はあまりなさそう。
紙の代わりにしかなってないかも。ディスプレイ上だと、やっぱり読みにくい。
ばーぢょん 1.5まで出ている。
ヘッダ tagICONDIR // 6バイト { WORD 予約 // 0x0000 WORD リソースの種類 // 0x0001 icon WORD リソースの数 n // 0x0002 2つ など ICONDIRENTRY アイコン1つの情報[n]; }
tagICONDIRENTRY { // 16バイト BYTE width; // 幅 普通16または32 BYTE height; // 高さ 16 または 32 ? BYTE colorcount; // 色数 普通16か? 0になってる。 2 ? BYTE Reserve; // 予約 WORD Planes; // プレーン数 0 ? WORD BitCount; // ビットのカウント 0 ? DWORD BytesInRes; // サイズ DWORD ImageOffset; // ファイル先頭からのオフセット }次がデータ?
http://siisise.net/jpeg.html へ移動しました。
http://siisise.net/mpeg.html へ移動しました。
PNGファイルシグネチャ
137 80 78 71 13 10 26 10
0x89504E470D0A1A0A
'PNG'CR LF SUB LF
ブロック構造
Length (4byte) データ(Chunk Data)の長さ
Chunk Type (4byte)
Chunk Data (可変)
CRC (4byte) Chunk Type と Chunk DataのCRC
参考
いろいろあります。
基本的に外枠はPNG といっしょです。JNGというJPEG形式のも加わってます。
MNG (JNGを含む)
MNG-LC (Low Complexity)、MNG-VLC (Very Low Complexity)
シグネチャ
138 77 78 71 13 10 26 10
0x8A4D4E470D0A1A0A
\212 MNG CR LF SUB LF
参考
インターネットでよく使われ拡張されている画像フォーマット 256色画像専用らしい。
アニメーションや透過処理、インターレス表示等ができる。
これは、特許のライセンスが問題になっていて、PNGという次のフォーマットが出来上がっている。
2004年6月頃に特許は期限が切れる。
特許が切れるまではJPEGまたはPNG、非圧縮データを利用しよう。
GIF89aの場合
ヘッダ(13バイト)
DB "GIF89a " (6バイト)
DW Width, Height (4バイト)
DB PacketFields (8ビット)
( Global Color Table Flag (1bit) | Color Resolution (3bit) | Sort Flag
(1bit) | Size of Global Color Table (3bit) )
Background Color Index(背景色 1バイト) Global Color Table Flagが0のときは
00、1のときのみ有効)
Pixel Aspect Ratio(縦横比)
フッタ
DB 0x3B (1バイト)
参考にしていないもの
C MAGAZINE 1999年10月号(ソフトバンク出版)
新しい画像フォーマットを作りますか?
モーションJPEGとか・・・。小さい動画もWebで扱いやすく。
帯域圧縮術あるかも・・・。
書きかけ・・・。
先頭が、IIまたはMMで、インテルかモトローラかという識別からはじまる画像フォーマット。
どのような情報が格納されているかというタグによってそれ以降のデータが決まるという非常に柔軟性の高いフォーマット。
TOWNSは、独自のフォーマットを採用してしまっている。
Offset | Size | |
00-01 | DB | "II" or "MM" データの順序がインテル並びか、モトローラ並びかを示す。 |
02-03 | DW | ばーぢょん 002Ah |
04-07 | DD | 00000008h IFDタグへのファイル先頭からのオフセット。普通、直後にあるので8 |
IFD(イメージファイルディレクトリ)タグ情報
00-01 DW 数
02- 12*n タグ
12バイトが1セット
00-01 | タグ種類 |
02-03 | タイプ 1: BYTE 2: ASCII 3: SHORT 4: LONG 5: RATIONAL |
04-07 | データ長 |
08-0B | 値 または 値へのオフセット |
最後のTAGは、4バイトの0
パレット参考
FM TOWNS High C Compiler のマニュアル
Oh!FM TOWNS(ソフトバンク)の記事
使わなくてはならなくなったので、BMPも解説する。WindowsとOS/2の画像フォーマットである。
二種類の形式がある。
ヘッダは、二つにわかれている。
実際のファイルを見てみれば、だいたいの処理を書くことができそう。
画像は、縦方向が通常と逆に記録されている。
左下からはじまり、右向きに走査しながら、上に伸びていく。
00-01 | 'BM' |
02-05 | FILE SIZE |
06-07 08-09 |
Reserved |
0A-0D | Header Size (Image Offset) |
Offset | |
00-03 | INFO HEADER SIZE |
04-07 | Width |
08-0B | Height |
0C-0D | Planes (1) |
0E-0F | Color bit size |
10-13 | 圧縮方式(0) |
14-17 | イメージのサイズ (0?圧縮時?) |
18-1B | 水平解像度 |
1C-1F | 垂直解像度 |
20-23 | パレット色数 |
24-27 | 重要色数 |
DD 00RRGGBB * n
参考にしていないもの
C MAGAZINE 1999年10月号
他
AppleがQuickTimeで使っていたり、MPEG4のベースにもなっているらしいフォーマットとはどんなものなのでしょうか? MSのRIFF形式を知っていれば、似たようなものです。
基本構造は Atom と呼ばれるようです。
参考
AVIは、RIFFをベースにしています。
初期のものは、ファイルで2GBまたは4GB、システムでは1GBまでのファイルしか扱えませんでした。Video for Windows 時代のAVIです。
その壁を超えたのがAVI 2.0 などと呼ばれていますが、具体的にどう超えたのでしょうか? RIFFチャンク自体を複数持てるようにしています。
AVI 2.0と呼ばれているものの実体はOpenDML AVI File Format Extensions といい、MatroxなどがAVIを拡張したものです。主にモーションJPEGのための拡張なのか?
Microsoftは、aviからasfやwmv(どちらも中身はほぼ同じ)といったファイルに移ってしまったようですが。
ストリーミング用として Advanced Streaming Format (ASF)、オーサリング用としてAdvanced Authoring Format (AAF) を作ったのか。失敗したのかね。
参考
RIFF系を紹介したついで
DVテープの仕様は HDデジタルVCR協議会(HD Digital VCR Conference どこにあるの?)で1994年に作られた。水平解像度500本以上。720x480 30fps。圧縮率は1/5。音声は48/44.1/32kHz/16bit*2、44.1kHz/16bit*2または32kHz/12bit*4。44.1/32kHz/16bitはほとんど見られないのかな? 25Mbit/秒。
NTSC(525/60)の場合、YUV=4:1:1。625/60は4:2:0だとか。
フレームは独立するMotion-JPEGのような形式。
IEC 61834-2 らしい IEEE1394上を転送するのは IEC 61833 かな
型 | 種類 | IEC | |
民生用DVC | General | 61834-1(2001-06)Ed 1.1 | |
SD | 61834-2(1998-)Ed 1.0 | 25Mbps | |
HD | 61834-3(1999-11)Ed 1.0 | 50Mbps | |
Pack header-- | 61834-4(1999-07)Ed 1.0 | ||
character info-- | 61834-5(1998-08)Ed 1.0 | ||
SDL | 61834-6(2000-08)Ed 1.0 | 12.5Mbps | |
EDTV2 | 61834-7(2001-03)Ed 1.0 | ||
PALplus | 61834-8(2001-06)Ed 1.0 | ||
DVB | 61834-9(2001-03)Ed 1.0 | ||
DTV | 61834-10(2001-02)Ed 1.0 |
いろいろあるようですね。
テープ上に記録するための規格なので、固定サイズの中にいろいろ情報を詰め込んでいたりする。
最小のサイズが 1 DIF Blockという80バイト長の固まりです。その上に1 DIF Sequence(=150 DIF Block NTSCの場合)なんかがあります。1フレームは10 DIF Sequenceでできていたりするようです。
DIF Sequenceの構造
この順で、150 DIF Blockで1 DIF Sequenceになります。AudioとVideoは混ざって相互に出てくる? Audio 1、Video 15ぐらいの間隔。括弧内はBlock番号。
1秒間に 29.97×10×150=44955 DIF Block を使います。IEEE1394上では、8kHz周期でパケットを送信するので、6 DIF Block(480バイト)ごとにパケットとして送信されます。頭にはCIPヘッダを付けます。
DIF Blockの構造
3バイトID、1バイトヘッダ、76バイトデータのようです。
テープの場合は前に2バイトのsyncと後ろに8バイトのパリティなどが付いて90バイトになります。
DVCAM(Sony系)やDVCPRO(松下系)は業務用
DVCAMはテープ速度が1.5倍(60分テープで40分)、音が映像と同期したりする。
Video系
だったりで、多少劣化するのかな
音声
29.97fpsの映像が中途半端な周波数なので、音声もそれに合わせるためなんか可変らしい
1 DIF Sequence中に9 DIF Blockぐらいずつ用意されている。が、可変でもある?
1600,1602*5サンプル/フレーム (DVCAM?)
参考
キャノン、シャープ、ソニー、ビクターの4社により発表された形式。ビクター仕様を基にしたようだ。IEC 61834-3 にHDフォーマット用の規格があるが、これとは別の形式である。
DVテープとおなじテープにHD画質の映像をMPEG2で記録できるようにしたもの。1080p、720iに対応する。音声は48kHz/16bit、MPEG-1 Audio Layer 2 384kHzで圧縮される。DV規格のPart 7、Part 8と呼ばれる部分を利用したとか。
720pの場合はMPEG2-TSが使われるが、1080iの場合はPESと呼ばれるMPEG2-TSの一部だけが記録される。
720p | 1080i | |
---|---|---|
解像度 | 1280×720 | 1440×1080 |
フレームレート | 60,50,30,25 | 60,50 |
符号化方式 | MPEG-2 Video (MP@H-14) | |
ビットレート | 約19Mbps | 約25Mbps |
ストリームタイプ | Transport Stream | PES(packetized elementary stream) |
ストリームインターフェース | IEEE1394 (MPEG2-TS) |
DV-AVI Type 1とType 2があり、直接取り込んだものはType 1だったり。48kHz音声はなぜかうまく使えないことも多いような気がする。
DV規格(SD仕様) と書かれていることなど多し。
OpenDML というのが標準的? AVI 2.0のこと?
1080p のハイビジョン映像は、HDVという規格があり、miniDVとテ同じテープにMPEG2で記録できる。
簡単に構造化ファイルのヘッダ。やっぱやめておく・・・。
内部は、64*64のJPEGが複数保存されていると思っていい。
画像は階層構造になっていて、64*64の大きさになるまで、もとの画像の半分の大きさの画像が順番に保存される。
これは、インターネット上でサムネイル画像や、拡大縮小画像を高速に分割送信するためのものらしく、専用のサーバとビューアもある。
階層構造
Root Entry
CompObjヘッダストリーム 0x1Cから
Global Info
Data Object 000001
SummaryInformation
Data Object Store 000001CompObj
Image Contents
Resolution xxxxSubimage 0000 HeaderICC Profile 0001(Option)
Subimage 0000 Data
SummaryInformation
ヘッダストリームのヘッダ長 | 4 (0x24) |
イメージ幅(WIDTH) | 4 |
イメージ高さ(HEIGHT) | 4 |
タイル数 | 4 |
タイル幅 | 4 (0x40) |
タイル高さ | 4 (0x40) |
チャンネル数 | 4 |
ヘッダテーブルへのオフセット | 4 (0x24) |
ヘッダエントリーの長さ | 4 (16) |
タイルヘッダ
Size | ||
オフセット | 4 | 前のオフセット+サイズ |
サイズ | 4 | |
圧縮タイプ | 4 | 0x0 非圧縮 0x1 単色圧縮(4-byte) 0x2 JPEG(8-bit) 0xFFFFFFFF Invalid tile |
圧縮サブタイプ | 1 | 単色の場合 Section 3.1.5.2 JPEGの場合 TABLE 4.5 00のとき : 8x8サイズの 0x1 : 分割 |
副標本? | 1 | 0x00 0x01 0x10 0x11 0x22 |
Internal color conversion | 1 | 0x00 color conversion無し 0x01 |
JPEG tables selector | 1 | 0x00 ハフマンテーブルはデータ中に含まれる 01~番号 Section 3.1.5.3(Image Contents)参照 |
IBM alphaWorksから、OLE構造化ファイルを扱うパッケージがリリースされている。ちょっと扱えない項目とかがあるかも。
私も、仕事でFlashPix用のパッケージを開発していた。
外から見れば、IStream / IStorageからなるWindows上の二つのインターフェイス。
内部はDOS
FATと似たような構造を持ち、Storageというディレクトリのようなものと、Streamというファイルのようなものに分かれる。
FAT、ディレクトリエントリ(1つで階層構造を表現できる)などもファイル内にある。
0x00000200を0とするセクタアドレス空間
FAT、ディレクトリ、ミニFAT、DIF、ストリームがある。
SIDでディレクトリを見分ける?
ヘッダ : 最初のDIFセクタを含む
DIFセクタ : FATセクタの位置を示す (7MB未満のファイルには現れない)
FATセクタ(ひとつ) : セクタ 0 (0x200) からはじまりやすい
ディレクトリー(ひとつ) : FATセクタの最初からはじまる。セクタ 1 (0x400)からはじまりやすい
階層上の全ストレージが1つの連続ディレクトリ上に書かれる
ルートディレクトリエントリ : ディレクトリの先頭に書かれるミニFat : ルートディレクトリエントリの示す位置からはじまる
役割
親として
サイズを示すものとして
ミニストリームセクタの開始点として
型 | 名前 | Offset | 長さ | 概要(FlashPixの例) |
BYTE | _abSig[8] | 000H | 08 | {D0 CF 11 E0 A1 B1 1A E1} {0E 11 FC 0D D0 CF 11 E0}古いバージョン |
CLSID | _clid | 008H | 16 | 00 ? |
USHORT | _uMinerVersion | 018H | 02 | 003E ? 0033(リファレンス実装) |
USHORT | _uDllVersion | 01AH | 02 | 0003 ? 0003(リファレンス実装) |
USHORT | _uByteOrder | 01CH | 02 | FFFE をIntelバイトオーダーで |
USHORT | _uSectorShift | 01EH | 02 | 0009(512を示す) セクタのサイズ |
USHORT | _uMiniSectorShift | 020H | 02 | 0006(64を示す) ミニセクタのサイズ |
USHORT | _usReserved | 022H | 02 | 0000 |
ULONG | _ulReserved1 | 024H | 04 | 00000000 |
ULONG | _ulReserved2 | 028H | 04 | 00000000 |
FSINDEX | _csectFat | 02CH | 04 | 0000001A FATチェーンSECTの数 |
SECT | _sectDirStart | 030H | 04 | 00000001 ディレクトリ・チェーンの先頭セクタ |
DFSIGNATURE | _signature | 034H | 04 | 00000000 署名 0 |
ULONG | _ulMiniSectorCutoff | 038H | 04 | 00001000 ミニストリームの最大サイズ 4096 これより小さいもの(で、512に64以上足りないもの?)はミニに書く |
SECT | _sectMiniFatStart | 03CH | 04 | 00000002 ミニFATチェーンの開始位置 |
FSINDEX | _csectMiniFat | 040H | 04 | 00000002 ミニFATチェーンSECTの数 |
SECT | _sectDifStart | 044H | 04 | FFFFFFFE なし |
FSINDEX | _csectDif | 048H | 04 | 00000000 |
SECT | _sectFat[109] | 04CH | 436 | 最初の109 FATセクタの位置を示す(DIFセクタ) |
FATがファイル中のどのセクタにあるかを示す。
ヘッダのFAT位置記述の続き。
最後は、次のDIFセクタの位置を示す。
7MB未満のファイルでは現れない。FATを特定の間隔で配置すれば、これは要らないような気がする。
型 | 名前 | Offset | Size | 概要 |
BYTE | _ab[32*sizeof(WCHAR)] | 000H | 64 | Unicodeのエレメント名 |
WORD | _cb | 040H | 02 | エレメント名文字のバイト長 |
BYTE | _mse | 042H | 01 | オブジェクトタイプ { 0:STGTY_INVALID 1:STGTY_STORAGE 2:STGTY_STREAM 3:STGTY_LOCKBYTES 4:STGTY_PROPERTY 5:STGTY_ROOT } |
BYTE | _bflags | 043H | 01 | 色 { 0:DB_RED 1:DB_BLACK(こっちだけでOK) } |
SID | _sidLeftSib | 044H | 04 | ディレクトリツリーの左 |
SID | _sidRightSib | 048H | 04 | ディレクトリツリーの右 |
SID | _sidChild | 04CH | 04 | STORAGEの場合の子 |
GUID | _clsId | 050H | 16 | STORAGEのCLSID |
DWORD | _dwUserFlags | 060H | 04 | STORAGEのユーザ定義フラグ |
TIME | _T_time[2] | 064H | 16 | STORAGEの作成/更新時間 |
SECT | _sectStart | 074H | 04 | STREAMのSECT開始位置 |
ULONG | _ulSize | 078H | 04 | ストリームのサイズ |
DFPROPTYPE | _dptPropType | 07CH | 02 | 予約0 |
型 | 名前 | Offset | Size | 概要 |
WORD | Byte Order Indicator | 000H | 02 | FFFE |
WORD | Format Version | 002H | 02 | |
DWORD | OS Version | 004H | 04 | |
CLSID | クラス Identifer | 008H | 16 | |
DWORD | 予約 | 018H | 04 |
サイズ | 名前 |
16 byte | FMTID |
DWORD | Offset |
セクション
DWORD | セクションサイズ |
DWORD | パラメータのカウント m |
プロパティID1 (DWORD) | Offset** (DWORD) |
プロパティID m | Offset** (DWORD) |
型情報(DWORD) | プロパティ値(可変長) |
繰り返し |
概要
フォーマット