将 CIFilter 与 AVFoundation 结合使用 (iOS)

2024-05-06

我正在尝试将滤镜应用于在 iOS 上使用 AVFoundation 创建的视频合成(滤镜可以是模糊、像素化、棕褐色等)。我需要实时应用效果并能够将复合视频渲染到磁盘,但我很高兴从其中之一开始。

不幸的是,我似乎无法弄清楚这一点。这是我能做的:

  • 我可以向正在播放电影的 UIView 添加一个动画层,但我不清楚是否可以通过这种方式处理传入的视频图像。
  • 我可以将 CIFilter 数组添加到 AVPlayerLayer,但事实证明这些在 iOS 中被忽略(它仅适用于 Mac OS X)。
  • 我可以将 AVVideoCompositionCoreAnimationTool 添加到 AVVideoCompopsition,但我不确定这是否会完成视频处理(而不是动画),并且它会崩溃并显示一条关于不适合实时播放的消息。我相信这是渲染到磁盘时渲染动画的解决方案。

其他应用程序也这样做(我认为),所以我认为我错过了一些明显的东西。

注意:我研究过 GPUImage 并且很想使用它,但它不适用于电影,尤其是带有音频的电影。参见示例:

  • AVMutableComposition 上运行时的 GPUImage 过滤器 https://stackoverflow.com/questions/18349021/gpuimage-filters-in-runtime-on-avmutablecomposition
  • https://github.com/BradLarson/GPUImage/issues/1339 https://github.com/BradLarson/GPUImage/issues/1339

你可以使用AV视频合成 https://developer.apple.com/library/mac/documentation/AVFoundation/Reference/AVVideoCompositing_Protocol/Reference/Reference.html and AVA同步视频合成请求 https://developer.apple.com/library/mac/documentation/AVFoundation/Reference/AVAsynchronousVideoCompositionRequest_Class/Reference/Reference.html#//apple_ref/doc/c_ref/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];

然后使用 OpenGL 渲染像素缓冲区,如中所述苹果的文档 https://developer.apple.com/library/ios/documentation/3ddrawing/conceptual/opengles_programmingguide/WorkingwithEAGLContexts/WorkingwithEAGLContexts.html。这将允许您实现任意数量的您想要的转换或过滤器。然后,您可以设置 AVAssetExportSession.videoCompostion,然后就可以将合成视频导出到磁盘。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 CIFilter 与 AVFoundation 结合使用 (iOS) 的相关文章

  • iOS 如何以编程方式简单返回到先前呈现/推送的视图控制器?

    如何以编程方式返回到先前的视图控制器 我找到了这个answer https stackoverflow com questions 28760541 programmatically go back to previous viewcont
  • 用于 RSS feed 解析的 Objective-C 库?

    我正在为 iOS 应用程序寻找一个 Objective C 库 该库将解析并显示 RSS 提要中的文章 具体来说 我正在寻找为新闻网站制作一个应用程序 如果可能的话 该框架应该能够使用各种 RSS XML 结构 嗯 有两个不同的新闻网站 一
  • 检查indexPath处的单元格在屏幕UICollectionView上是否可见

    我有一个CollectionView向用户显示图像 我在后台下载这些 下载完成后 我调用以下函数来更新collectionViewCell并显示图像 func handlePhotoDownloadCompletion notificati
  • 应用内购买导致偶尔崩溃

    我在互联网上搜索了这方面的帮助 但没有结果 我的应用程序已在应用程序商店中上线 少数用户报告应用程序在进行应用内购买后冻结并崩溃 我的游戏中唯一的 IAP 它基本上解锁了完整版本 即使他们重新启动设备并尝试继续 设备也会再次崩溃 我无法重现
  • 使用 Objective C 将 html 字符串插入 sqlite 数据库

    我正在使用下面的代码片段将 html 字符串插入 sqlite 数据库 我的代码工作正常 但是当我检索相同的 html 字符串并在 Web 视图中显示时 它不会呈现 一些数据正在被修改 任何人都可以帮助如何插入长 html 字符串存入数据库
  • 与桌面浏览器相比,移动浏览器有多强大? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在 HTML5 中设置视频高度

    也许这是一个简单的问题 但它真的让我发疯 我只想设置 HTML5 视频的高度和宽度 我正在使用这段代码
  • Flutter“运行 pod install 时出错”“Pods-Runner”目标具有传递依赖项

    当尝试运行我的 flutter 项目时 我得到 运行 pod install 时出错 我看到另一个非常相似的post https github com flutter flutter issues 11856但我不确定我是否也遇到同样的问题
  • 如何在 Xcode 8 中更改应用程序显示名称以添加空格

    我试图在 Xcode 8 中的应用程序名称 独立贴纸包 中添加一个空格 我在这里看到的解决方案是更改产品名称 在包装中 或更改 捆绑显示名称 我更改了产品名称 但没有起作用 我清理 重建 重置模拟器中的内容和设置 并注销 xcode 重新登
  • iOS-如何使用 AVAsset 或 AVURLAsset 获取 .mp4 文件的持续时间

    我知道视频类型问题的持续时间之前已得到解答 但我在获取视频持续时间方面遇到了真正的麻烦 mp4文件通过使用AVAsset and by AVURLAsset 我正在使用以下代码 NSString itemPathString NSSearc
  • 为什么一个崩溃日志具有象征意义,而不是另一个?

    我在 XCode Organizer 中有两个来自 iPhone 应用程序的崩溃日志 两者相隔 20 分钟内发生 在同一台设备上运行相同版本的应用程序 其中一个已被象征化 而另一个则没有 无符号日志具有类型和代码 Exception Typ
  • 如何解决这个错误? - 类“ViewController”没有初始化程序

    我创造了UILabel快速编程 但它给了我以下错误 类 ViewController 没有初始值设定项 Code class ViewController UIViewController let lbl LastName UILabel
  • SpriteKit内存管理预加载缓存和fps问题

    我的问题非常简单 根据苹果文档 您可以在呈现场景之前将纹理预加载到 RAM 中 如下所示 SKTextureAtlas atlas SKTextureAtlas atlasNamed effect circle explode SKText
  • 填充占位符文本 ios

    我想让占位符文本显示在文本字段的中间 填充占位符文本 占位符文本的大小也需要增加 我的代码如下 我该如何解决这个问题 UITextField textField UITextField alloc initWithFrame CGRectM
  • 如何将 NSDictionary 转换为 NSData,反之亦然?

    我正在发送NSString and UIImage使用蓝牙 我决定将两者都存储在NSDictionary然后将字典转换为NSData 我的问题是如何转换NSDictionary to NSData反之亦然 NSDictionary gt N
  • 如何强制重装iOS模拟器?

    我想下载模拟器组件 Xcode 6 2 但在下载过程中我的互联网连接丢失了 Xcode 仍然显示我已经安装了 7 1 模拟器 你知道如何强制重装iOS模拟器吗 我已完成以下步骤 从 Library Caches com apple dt X
  • 模态转换风格就像邮件应用程序中一样

    我试图实现模态呈现效果 其中呈现的视图仅部分覆盖父视图 如下图所示 我知道我可以通过使用实现自定义转换来实现这一点UIPresentationController 我不想重新发明轮子 所以在继续开发之前我想问一下 API 中是否有对这种转换
  • Apple IOS 上的 C# 应用程序 [已关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有基于 C Net 的应用程序 有什么方法可以在 Apple IOS 上运行这些应用程序吗 我没有资
  • 使用 Objective-C 将 XMP 数据嵌入到 PNG

    我需要将自定义 XMP 文件嵌入到 iOS 应用程序中的 PNG 中 到目前为止 我能做的就是编译 Adob e XMP 工具包 生成 Xcode 项目 然后正确编译该项目 从那里我不知道如何在我的 Xcode 项目中使用该库以及如何使用它
  • Flutter:“UIAlertView”已弃用:首先在 iOS 9.0 中弃用

    我收到以下错误 Users flo pub cache hosted pub dartlang org image picker 0 6 7 12 ios Classes FLTImagePickerPlugin m 1 49 20 war

随机推荐