itok's Lab

昔の開発ネタを記録として残してます

動画・音声などの情報取得

動画や音声ファイルの再生時間やファイルサイズなどをCocoa経由で取得します。

QuickTime API使用

まず NSMovie を生成しQuickTimeのオブジェクトに変換。

NSMovie* movie = [[NSMovie alloc] initWithURL:url byReference:NO];
Movie qtmov = [movie QTMovie];

再生時間の取得。

TimeValue duration = GetMovieDuration(qtmov);   // unit数の取得
TimeScale timeScale = GetMovieTimeScale(qtmov); // 秒/unit の取得
int sec = duration / timeScale;                 // 秒の計算

ファイルサイズの取得。

long size = GetMovieDataSize(qtmov,
                             0,         // 開始
                             duration); // 長さ

動画の縦横サイズ取得。

Rect rect;
GetMovieBox(qtmove, &rect);
int width = rect.right - rect.left;  // 幅
int height = rect.bottom - rect.top; // 高さ

QTKit 使用 (要QuickTime7)

QuickTime7から登場したQTKitは従来のQuickTime APIを使わなくてもCocoaからかなりのことができてしまうという便利フレームワークです。Appleのクラス仕様の冒頭には「Tigerでしかダメ」みたいなことが書かれていますが、PantherでもQuickTime7が入っていれば大丈夫です。

まず、生成。

QTMovie* movie = [[QTMovie alloc] initWithURL:url error:nil];

再生時間の取得。

QTTime time = [movie duration];
int duration = time.timeValue / time.timeScale; // 秒への変換

ファイルサイズの取得。

NSNumber* num = [movie attributeForKey:QTMovieDataSizeAttribute]; // 属性取得
long long fileSize = [num longLongValue];

動画の縦横サイズ取得。

NSValue* sizeVal = [movie attributeForKey:QTMovieNaturalSizeAttribute]; // 属性取得
NSSize size = [sizeVal sizeValue];

こうやってみるとQTKitはほんと便利だなあ〜と思うわけです。