Основываясь на этой теме в одном из старых списков рассылки Apple, я бы сказал, что это, по крайней мере, раньше было невозможно.Сейчас я пытаюсь выяснить, можно ли это сделать с помощью API более низкого уровня.
http://lists.apple.com/archives/quicktime-api/2008/Nov/msg00049.html
5 ноября 2008 г., в 12:08, Нил Клейтон написал:
Я хотел бы получить кадр YUV из фильма (фильм закодирован в YUV, кадры изначально были k2vuyPixelFormat, и формат кодировщика был бы совместим с этим - например: H264 или AIC и т. Д.).
Когда я делаю это:
NSError *error = nil;
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
QTMovieFrameImageTypeCVPixelBufferRef, QTMovieFrameImageType,
[NSNumber numberWithBool:YES], QTMovieFrameImageHighQuality,
nil];
CVPixelBufferRef buffer = [qtMovie frameImageAtTime:QTMakeTime(lastFrame, movie.timeScale)
withAttributes:dict error:&error];
Рамка кажется действительной.Он имеет правильную ширину и высоту.Но, кажется, он имеет тип k32ARGBPixelFormat, когда я делаю:
OSType type = CVPixelBufferGetPixelFormatType(buffer);
Предполагается, что я делаю это неправильно - какой правильный метод для получения кадра типа k2vuyPixelFormat из фильма?Или, если это невозможно, как проще всего выполнить преобразование RGB-YUV в CVPixelBuffer типа k2vuyPixelFormat?Мне здесь не нужна скорость (это одноразовая, однокадровая операция).
7 ноября 2000 года Тим Монро из QuickTime Engineering отвечает:
В настоящее время нет способа сделать то, что вы хотите, с помощью frameImageAtTime.Я бы предложил подать запрос на улучшение.