1

QTKit または 10.5 以降をターゲットとする OS X の古い QuickTime API を使用して、QuickTime ムービーから次の情報を抽出する方法を判断するのが難しいと感じています。

  • 使用されるビデオおよびオーディオ コーデック (例: "H.264")
  • ビデオとオーディオのビットレート (例: 64 kbps)
  • 寸法

私が遭遇した特定の問題は次のとおりです。

1) 私が見つけたビデオとオーディオのコーデック名への唯一の手段は、 と の使用を伴いますImageDescriptionHandleSoundDescriptionHandleどちらも Carbon のみのメソッドNewHandleClearDisposeHandleを必要とし、32 ビットのみの Media オブジェクトを必要とするようです。Carbon フレームワークを必要とせず、64 ビットと互換性のある、より最新の方法はありますか?

2) ビットレートについては、GetMediaDataSizeTime64 を取得し、トラックの長さ (秒単位) で割っています。ただし、オーディオ トラックが 1 つの場合、そのメソッドは 128 kbps の値を返しますがQTSoundDescriptionGetProperty、オーディオ トラック メディアとパラメーターを指定して呼び出すと、kQTAudioPropertyID_FormatString"64 kbps" の文字列が返されます。これら 2 つの値が異なるのはなぜですか。トラックのビットレートを計算するより良い方法はありますか?

3)特定の映画について、[QTMovie movieAttributes] objectForKey:QTMovieNaturalSizeAttribute]または によって返される寸法が正しくありません。[QTTrack attributeForKey:QTTrackDimensionsAttribute]返されるサイズは 720 x 480 ですが、QuickTime Player の実際の表示サイズは 640 x 480 です。プレーヤーの情報ウィンドウには、サイズ文字列「720 x 480 (640 x 480)」が表示されます。実際の映画の寸法を決定するより良い方法はありますか?

前もって感謝します!

4

1 に答える 1

3

このメタデータは、[movie tracks] QTTrack*オブジェクトから取得できます。

1) トラックを列挙すると、ビデオとオーディオのトラックを見つけることができます。

QTMedia* media = [track media];

if ([media hasCharacteristic:QTMediaCharacteristicVisual])
{
    // video track
}

if ([media hasCharacteristic:QTMediaCharacteristicAudio])
{
    // audio track
}

コーデックに関する情報:

NSString* summary = [track attributeForKey:QTTrackFormatSummaryAttribute];

2) 映画のビットレートを計算するには、すべてのトラックの合計データ サイズを計算し、それを映画の長さで割る必要があります。

トラックを列挙すると、各トラックのデータ サイズが取得されます。

QTMedia* media = [track media];
Track quicktimeTrack = [track quickTimeTrack];
TimeValue startTime = 0;
TimeValue duration = GetTrackDuration(quicktimeTrack);
long trackDataSize = GetTrackDataSize(quicktimeTrack, startTime, duration);

3) ムービーのサイズを取得するには

NSSize movieSize = [(NSValue*)[[movie movieAttributes] objectForKey:QTMovieNaturalSizeAttribute] sizeValue];

ただし、ビデオ トラックの実際のサイズは異なる場合があります。

Fixed width = 0;

Fixed height = 0;

GetTrackDimensions(videoTrack, &width, &height);
于 2011-10-06T11:25:35.717 に答える