[英]iOS AVFoundation: Best way to apply CIFilter to photos from AVCapturePhoto for saving
[英]Using CIFilter with AVFoundation (iOS)
我正在嘗試將過濾器應用於在iOS上使用AVFoundation創建的視頻合成(過濾器可能是,例如,模糊,像素化,棕褐色等)。 我需要實時應用效果並能夠將復合視頻渲染到磁盤,但我很高興從一個或另一個開始。
不幸的是,我似乎無法想出這個。 這是我能做的:
其他應用程序這樣做(我認為),所以我認為我錯過了一些明顯的東西。
注意:我已經研究了GPUImage,我很樂意使用它,但它對電影,特別是帶有音頻的電影效果不佳。 參見例如:
您可以使用AVVideoCompositing和AVAsynchronousVideoCompositionRequest協議來實現自定義合成器。
CVPixelBufferRef pixelBuffer = [AVAsynchronousVideoCompositionRequest sourceFrameByTrackID:trackID];
CIImage *theImage = [CIImage imageWithCVPixelBuffer:pixelBuffer];
CIImage *motionBlurredImage = [[CIFilter *filterWithName:@"CIMotionBlur" keysAndValues:@"inputImage", theImage, nil] valueForKey:kCIOutputImageKey];
CIContext *someCIContext = [CIContext contextWithEAGLContext:eaglContext];
[someCIContext render:motionBlurredImage toCVPixelBuffer:outputBuffer];
然后使用Apple的文檔中描述的OpenGL渲染像素緩沖區。 這將允許您實現所需的任意數量的轉換或過濾器。 然后,您可以設置AVAssetExportSession.videoCompostion,然后您就可以將合成視頻導出到磁盤。
您可以使用AVAssetReader讀取AVComposition(它是AVAsset子類)。 獲取像素緩沖區,將其傳遞給CIFilter(設置它以便它使用GPU進行渲染(無顏色管理等)並根據您的需要在屏幕/輸出緩沖區上渲染它。我不認為Blur可以實時實現,除非你直接使用GPU。
您可以閱讀有關CIFilter應用程序的視頻(應用過濾器到視頻部分):
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.