我有一个持续时间为 60 秒的视频,视频帧大小为 1200*700。我想做像素化过滤部分帧 CGRect(100, 100, 300, 300) 10 秒到 15 秒。它可能有多个这种部分帧和时间范围。
最后,我想在导出合成之前在 AVPlayer 中播放合成。
let filter = CIFilter(name: "CIPixellate")
let composition = AVVideoComposition(asset: asset, applyingCIFiltersWithHandler: { request in
// Clamp to avoid blurring transparent pixels at the image edges
let source: CIImage? = request.sourceImage.clampedToExtent()
filter?.setValue(source, forKey: kCIInputImageKey)
filter?.setValue(15, forKey: kCIInputScaleKey)
// Crop the blurred output to the bounds of the original image
let rect = request.sourceImage.extent
//let rect = CGRect(x: 100, y: 100, width: 300, height: 300)
let output: CIImage? = filter?.outputImage?.cropped(to: rect)
// Provide the filter output to the composition
if let anOutput = output {
request.finish(with: anOutput, context: nil)
}
})
但是,它确实使整个视频像素化。如果我给出特定的框架,它会在框架外变成绿色。另外,这里我不能使用时间范围。
如果我使用合成动画工具,导出前无法在 AVPlayer 中播放。我该如何解决这个问题?