Edited at

Objective-C で avi ファイルの FourCC を書き換える

More than 5 years have passed since last update.


avi の特徴

0-4 バイト: RIFF RIFF ヘッダー

8-12 バイト: AVI RIFF の FourCC

12-16 バイト: LIST

20-28 バイト: hdrlavih データフォーマット定義リスト、avi メインヘッダー

96-104 バイト: strlstrh ストリームヘッダーチャンク

108-112 バイト: vids ならヘッダの次にビデオストリームがある

112-116 バイト: FourCC

164-168 バイト: strf ストリームフォーマットチャンク

188-192 バイト: FourCC

QuickTime だと 188-192 の FourCC 書き換えが影響するっぽいので、ここをいじれば良いかもしれない。

YUY2 な avi は yuvs にすれば QuickTime で読める。

http://msdn.microsoft.com/ja-jp/library/cc352264.aspx

http://www.usagi-goten.com/jp/AVI_structure.html


書き換え


NSFileHandleでシークして上書き

NSFileHandle *fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:aviFilePath];

NSData *newData = [NSData dataWithBytes:(void*)[fourCC cString] // 最近はDeprecatedメソッドらしい。別の方法で
length:4];

[fileHandle seekToFileOffset:188];
[fileHandle writeData:newData];
[fileHandle closeFile];