1

我发现很难确定如何从 QuickTime 电影中提取以下信息,无论是使用 QTKit 还是 OS X 中针对 10.5+ 的旧版 QuickTime API:

  • 使用的视频和音频编解码器(例如“H.264”)
  • 视频和音频比特率(例如 64 kbps)
  • 方面

我遇到的具体问题是:

1)我发现的视频和音频编解码器名称的唯一方法涉及使用ImageDescriptionHandleand SoundDescriptionHandle,这两种方法似乎都需要 Carbon-only 方法NewHandleClearand DisposeHandle,以及仅需要 32 位 Media 对象。有没有更现代的方法不需要 Carbon 框架并且兼容 64 位?

2)对于比特率,我得到 GetMediaDataSizeTime64 并除以轨道持续时间(以秒为单位)。但是,在一个音轨的情况下,该方法返回 128 kbps 的值,但QTSoundDescriptionGetProperty使用音轨媒体和kQTAudioPropertyID_FormatString参数调用会返回“64 kbps”字符串。为什么这两个值会不同?有没有更好的方法来计算音轨的比特率?

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) 要计算电影的比特率,您需要计算所有轨道的总数据大小并将其除以电影持续时间。

通过tracks枚举得到每个track的数据大小:

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 回答