gpt4 book ai didi

ios - CIImage 回到 CMSampleBuffer

转载 作者:可可西里 更新时间:2023-11-01 01:09:18 28 4
gpt4 key购买 nike

我使用 AVAssetWriterCMSampleBuffer 数据(来自视频、音频输入)录制视频(.mp4 文件)。

在录制时我想处理帧,我正在将 CMSampleBuffer 转换为 CIImage 并对其进行处理。

但是如何使用来自 CIImage 的新处理图像缓冲区更新 CMSampleBuffer

func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
if output == videoOutput {
let imageBuffer: CVPixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)!
let ciimage: CIImage = CIImage(cvPixelBuffer: imageBuffer)
... // my code to process CIImage (for example add augmented reality)
// but how to convert it back to CMSampleBuffer?
// because AVAssetWriterInput to encode video/audio in file needs CMSampleBuffer
...
}
...
}

最佳答案

您需要使用 CIContext 的 render(_:to:bounds:colorSpace:) 将 CIImage 渲染到 CVPixelBuffer 中方法。

然后您可以使用例如 CVPixelBuffer 创建一个 CMSampleBuffer CMSampleBufferCreateReadyWithImageBuffer(_:_:_:_:_:)

出于效率原因,您可能需要使用 CVPixelBuffer 池,Apple 的 AVCamPhotoFilter 示例代码中显示了一个示例。特别是,请参阅 RosyCIRenderer class .

另请参阅可能对您有帮助的答案Applying a CIFilter to a Video File and Saving it

关于ios - CIImage 回到 CMSampleBuffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49053547/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com