На моем 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
copyCGImageAtTime:actualTime:error:
метод:
NSError *err;
NSImage *img = [[NSImage alloc] initWithCGImage:[imageGenerator copyCGImageAtTime:time actualTime:NULL error:&err] size:dimensions];
Изображение сгенерировано успешно, без ошибок, но когда я проверяю его, я вижу, что оно 8 бит / канал:
(lldb) po img
<NSImage 0x600001793f80 Size={3840, 2160} Reps=(
"<NSCGImageSnapshotRep:0x6000017a5a40 cgImage=<CGImage 0x100520800>
(DP)\n\t<<CGColorSpace 0x60000261ae80> (kCGColorSpaceICCBased;
kCGColorSpaceModelRGB; Composite NTSC)>\n\t\twidth = 3840, height = 2160,
bpc = 8, bpp = 32, row bytes = 15360
\n\t\tkCGImageAlphaPremultipliedFirst | kCGImageByteOrder32Big |
kCGImagePixelFormatPacked \n\t\tis mask? No, has masking color? No,
has soft mask? No, has matte? No, should interpolate? Yes>"
)>
Как создать полный 10-бит без потерь (или, длясовместимость, 16-битные или 32-битные) кадры из 10-битного видео?
Я на macOS 10.14.