我在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上。
答案 0 :(得分:0)
由于缺乏任何相关信息,我放弃了AVAssetImageGenerator
并继续将ffmpeg
嵌入到我的应用程序中,并调用它来提取10位帧。