AVAssetImageGenerator copyCGImageAtTime:actualTime:error:从10位视频生成8位图像

时间:2018-10-24 23:58:20

标签: objective-c macos cocoa avfoundation avassetimagegenerator

我在Mac上有一个10位视频,我要提取完整10位/通道数据中的帧。我加载了资产,并确认它是10位的:

CMFormatDescriptionRef formatDescriptions = (__bridge CMFormatDescriptionRef)(track.formatDescriptions[0]);
float frameRate = track.nominalFrameRate;     
int bitDepth = ((NSNumber*)CMFormatDescriptionGetExtension(formatDescriptions, (__bridge CFStringRef)@"BitsPerComponent")).intValue;

bitDepth对于许多视频来说是8,但对于该视频来说是10(我知道我还是以10位录制的),因此AVFoundation可以识别频道位正确的深度。

但是,我想使用AVAssetImageGenerator的{​​{1}}方法从视频生成单个帧:

copyCGImageAtTime:actualTime:error:

图像成功生成,没有错误,但是当我检查它时,我看到它是8位/通道:

NSError *err;
NSImage *img = [[NSImage alloc] initWithCGImage:[imageGenerator copyCGImageAtTime:time actualTime:NULL error:&err] size:dimensions];

如何从10位视频中生成完整,无损的10位(或出于兼容性考虑,为16位或32位)帧?

我在macOS 10.14上。

1 个答案:

答案 0 :(得分:0)

由于缺乏任何相关信息,我放弃了AVAssetImageGenerator并继续将ffmpeg嵌入到我的应用程序中,并调用它来提取10位帧。