0

我有一个持续时间为 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 中播放。我该如何解决这个问题?

4

0 回答 0