在 GPU 上应用 CIFilter Cocoa
Applying CIFilter on the GPU Cocoa
Apple 文档给出了将 CIFilter 应用于 AVAsset 的示例:
let filter = CIFilter(name: "CIGaussianBlur")!
let composition = AVVideoComposition(asset: asset, applyingCIFiltersWithHandler: { request in
// Clamp to avoid blurring transparent pixels at the image edges
let source = request.sourceImage.clampingToExtent()
filter.setValue(source, forKey: kCIInputImageKey)
// Vary filter parameters based on video timing
let seconds = CMTimeGetSeconds(request.compositionTime)
filter.setValue(seconds * 10.0, forKey: kCIInputRadiusKey)
// Crop the blurred output to the bounds of the original image
let output = filter.outputImage!.cropping(to: request.sourceImage.extent)
// Provide the filter output to the composition
request.finish(with: output, context: nil)
})
这在某些视频上效果很好(使用 AAC 编解码器的视频似乎性能更高),而在其他视频上 CPU 使用率激增,视频从未完成处理。有没有办法将其移动到 GPU 上以加快 up/not 占用这么多 CPU 的速度?我看到 this question 用于 iOS 但 CIContext contextWithEAGLContext:
在 OS X 上不可用。我是 AVFoundation/video 处理的新手,[=25 上是否有等效项=] X?
注意:我不想实时执行此操作,我只是想应用过滤器并使用 GPU 将文件导出到文件系统。
macOS 改为 contextWithCGLContext
用于 OpenGL:
+ (CIContext *)contextWithCGLContext:(CGLContextObj)cglctx
pixelFormat:(nullable CGLPixelFormatObj)pixelFormat
colorSpace:(nullable CGColorSpaceRef)colorSpace
options:(nullable NSDictionary<NSString*,id> *)options;
或 contextWithMTLDevice:
金属,如果你喜欢的话:
+ (CIContext *)contextWithMTLDevice:(id<MTLDevice>)device;
Apple 文档给出了将 CIFilter 应用于 AVAsset 的示例:
let filter = CIFilter(name: "CIGaussianBlur")!
let composition = AVVideoComposition(asset: asset, applyingCIFiltersWithHandler: { request in
// Clamp to avoid blurring transparent pixels at the image edges
let source = request.sourceImage.clampingToExtent()
filter.setValue(source, forKey: kCIInputImageKey)
// Vary filter parameters based on video timing
let seconds = CMTimeGetSeconds(request.compositionTime)
filter.setValue(seconds * 10.0, forKey: kCIInputRadiusKey)
// Crop the blurred output to the bounds of the original image
let output = filter.outputImage!.cropping(to: request.sourceImage.extent)
// Provide the filter output to the composition
request.finish(with: output, context: nil)
})
这在某些视频上效果很好(使用 AAC 编解码器的视频似乎性能更高),而在其他视频上 CPU 使用率激增,视频从未完成处理。有没有办法将其移动到 GPU 上以加快 up/not 占用这么多 CPU 的速度?我看到 this question 用于 iOS 但 CIContext contextWithEAGLContext:
在 OS X 上不可用。我是 AVFoundation/video 处理的新手,[=25 上是否有等效项=] X?
注意:我不想实时执行此操作,我只是想应用过滤器并使用 GPU 将文件导出到文件系统。
macOS 改为 contextWithCGLContext
用于 OpenGL:
+ (CIContext *)contextWithCGLContext:(CGLContextObj)cglctx
pixelFormat:(nullable CGLPixelFormatObj)pixelFormat
colorSpace:(nullable CGColorSpaceRef)colorSpace
options:(nullable NSDictionary<NSString*,id> *)options;
或 contextWithMTLDevice:
金属,如果你喜欢的话:
+ (CIContext *)contextWithMTLDevice:(id<MTLDevice>)device;