【问题标题】:Real-time way to extract all video frames in YV12 (YUV420) format from QuickTime movie?从 QuickTime 电影中提取 YV12 (YUV420) 格式的所有视频帧的实时方法?
【发布时间】:2011-08-05 21:01:33
【问题描述】:

我在 QTKit 中打开了 QTMovie。

我需要以 YV12 格式 (kYUV420PixelFormat) 实时获取此视频的每一帧(即,我将其传递给仅接受 YV12 并需要播放视频的外国代码实时)。

似乎应该做的方式是调用 [movie frameImageAtTime: [movie currentTime] withAttributes: error: ] 为当前帧,然后 [电影 stepForward] 进入下一帧,依此类推,直到我得到所有帧。然而,就我的研究而言,我找不到让 QTKit 以 YV12 格式或任何其他 YUV 格式为我提供数据的方法。 frameImageAtTime: 调用可以将其转换为:

  • NSImage(但 NSImage 不能存储平面 YUV),
  • CGImage(同样的东西),
  • CIImage(同样的东西),
  • CVPixelBuffer(这个可以存储YUV,但是好像没办法配置调用从中获取YUV,默认返回ARGB32数据)
  • OpenGL 纹理(这可能也可以配置,但我在 OpenGL 中不需要这些数据,我需要在内存中)

因此,使用这种据称是新的和优化的 QTKit 技术的唯一方法似乎是从中获取 ARGB 数据,使用自定义代码将每一帧转换为 YV12,并希望它仍然足够快以用于实时。还是我错过了什么?

在旧的 QuickTime 中,使用 kYUV420PixelFormat 设置 GWorld 相对容易,并对其进行电影渲染,并且 可以正常工作。但是旧的 QuickTime 调用是遗留的、已弃用的调用,不再使用......

我应该怎么做才能在没有不必要的转换的情况下获得 YUV420 平面框架?

【问题讨论】:

  • 最后,我采用了“不再使用的旧的、已弃用的方式”,通过使用 GWorldPtrs 可以轻松获得 30 fps。向后兼容性或 Apple 技术 - 选择一个。

标签: macos quicktime qtkit core-video


【解决方案1】:

根据旧苹果邮件列表中的一个线程,我认为这至少在过去是不可能的。我现在正在尝试找出是否可以使用较低级别的 API 来完成。

http://lists.apple.com/archives/quicktime-api/2008/Nov/msg00049.html

2008 年 11 月 5 日下午 12:08,尼尔·克莱顿写道:

我想从电影中获取 YUV 帧(电影编码为 YUV,帧原本是k2vuyPixelFormat和encoder 格式将与之兼容 - 例如: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 转换成 k2vuyPixelFormat 类型的 CVPixelBuffer?一世 这里不需要速度(这是一次性的,一帧操作)。

QuickTime Engineering 的 Tim Monroe 于 2008 年 11 月 7 日回应:

目前没有办法通过 frameImageAtTime 做你想做的事。我建议提交增强请求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 2014-03-20
    • 2014-05-06
    • 1970-01-01
    • 2020-06-27
    • 2011-10-08
    • 1970-01-01
    相关资源
    最近更新 更多