使用 GPUImage 过滤视频

2023-12-03

我在用着GPUImage在我的应用程序中并尝试过滤视频。实时视频过滤效果良好。当我尝试从文件系统将视频读入内存并使用发布在日落湖软件教程页面和 SimpleVideoFileFilter 演示中。

EDIT:我意识到我原来的帖子可能没有提出足够具体的问题。我要问的是:如何将视频从磁盘读入内存,应用 GPUImageFilter,然后用过滤后的版本覆盖原始视频?

该应用程序因以下错误而崩溃:

-[AVAssetWriter startWriting] Cannot call method when status is 2

状态2是AVAssetWriterStatusCompleted。我已经看到其他三个都发生了同样的失败AVAssetWriterStatuses.

我在下面发布了相关代码。

GPUImageFilter *selectedFilter = [self.allFilters objectAtIndex:indexPath.item];

// get the file url I stored when the video was initially captured
NSURL *url = [self.videoURLsByIndexPath objectForKey:self.indexPathForDisplayedImage];

GPUImageMovie *movieFile = [[GPUImageMovie alloc] initWithURL:url];
movieFile.runBenchmark = YES;
movieFile.playAtActualSpeed = NO;
[movieFile addTarget:selectedFilter]; // apply the user-selected filter to the file

unlink([url.absoluteString UTF8String]); // delete the file that was at that file URL so it's writeable

// A different movie writer than the one I was using for live video capture.
GPUImageMovieWriter *editingMovieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:url size:CGSizeMake(640.0, 640.0)];

[selectedFilter addTarget:editingMovieWriter];

editingMovieWriter.shouldPassthroughAudio = YES;
movieFile.audioEncodingTarget = editingMovieWriter;
[movieFile enableSynchronizedEncodingUsingMovieWriter:editingMovieWriter];

[editingMovieWriter startRecording];
[movieFile startProcessing]; // Commenting out this line prevents crash

// weak variables to prevent retain cycle
__weak GPUImageMovieWriter *weakWriter = editingMovieWriter;
__weak id weakSelf = self;
[editingMovieWriter setCompletionBlock:^{
    [selectedFilter removeTarget:weakWriter];
    [weakWriter finishRecording];
    [weakSelf savePhotosToLibrary]; // use ALAssetsLibrary to write to camera roll
}];

也许我的问题在于editingMovieWriter 的范围。或者可能是我正在使用与我尝试写入的相同的 URL 初始化 GPUImageMovie 实例。我已经阅读了 GPUImage github 问题页面上的几篇文章、SO 上的几篇相关文章、自述文件以及上面链接的教程。

任何对此问题的见解将不胜感激。谢谢。


这背后至少可能有一件事。在上面的代码中,您没有坚持对您的movieFile源对象。

如果这是一个启用 ARC 的项目,则该对象将在您完成设置方法后立即被释放(如果不是,您将泄漏该对象)。这将停止电影播放,释放电影本身,并导致黑帧被发送到过滤器管道(其他潜在的不稳定因素)。

你需要做movieFile一个强引用的实例变量,以确保它挂在这个设置方法之后,因为所有电影处理都是异步的。

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

使用 GPUImage 过滤视频 的相关文章

随机推荐

  • IE7下有两个同名的cookie怎么办?

    一些背景 除了 PHPSESSID 之外 CakePHP 还写入它自己的会话 ID cookie 这用于验证请求 然后 SWFupload 发送一个文件和该令牌进行身份验证 并被选为新的用户代理 因此在 cakephp 中 您必须禁用 ch
  • 具有命名空间解组功能的 JAXB(使用 REST 服务中的 Jersey)

    我正在尝试从 Convio 的公共 api 解组一个简单的 xml 文档 我没有收到以下代码的任何编译器错误 但它也不会产生结果 这些值为空 如果我从 xml 文档中删除架构和命名空间项 并从 POJO 中删除命名空间属性 那么它将运行得很
  • plot_surface : 获取写在右下角的 x,y,z 值

    我是 matplotlib 的新用户 使用 matplotlib 和plot surface 绘制曲面 3D 时 会出现一个带有图形的窗口 在该窗口中 右下角有鼠标实际位置的坐标 是否可以访问这些值 我在互联网上搜索过 但提出的解决方案很少
  • 新版本的c++

    C 是否会推出新版本 何时推出 C C 0X 的创建者常见问题解答 http www2 research att com bs C 0xFAQ html 问题 C 0x什么时候成为正式标准 但 C 0X 确实在某种程度上存在于各种编译器中
  • 如何在Three20的AppDelegate中添加全局右栏按钮(UINavigationController)

    我想在全局 AppDelegate 中添加一个全局右栏按钮 这样我的所有视图控制器都会自动具有此按钮 我在AppDelegate中添加了 navigator window rootViewController navigationContr
  • 将具有重复字符的字符串拆分为列表

    我对正则表达式没有太多经验 但我已经阅读了很多相关内容 假设有一个字符串s 111234 我想要一个列表 其中字符串分为L 111 2 3 4 我的方法是让一组检查它是否是数字 然后检查该组是否重复 像这样的东西 L re findall
  • JS:获取contentEditable div中所有选定节点的数组

    你好 我使用 contentEditable 已经有一段时间了 我想我已经很好地处理它了 我回避的一件事是如何获取对部分或完全在用户选择范围内的所有节点的引用数组 有人有主意吗 可以从以下几点开始
  • 导航到不同的 html 页面时,jQuery Mobile 页面事件不会触发

    我正在尝试使用导航到不同的 html 页面 mobile changePage PlayGame html transition slideup true true PlayGame html 正在转换为 但是 以下内容均未触发 docum
  • 我们如何在单个 JSF 页面中使用多个 标记或 标记?

    我的问题是 我在一个 JSF 页面中有 2 个表单 每个表单都有其
  • 如何使用 UIGestureRecognizer 检测圆周运动

    我希望能够检测到某人的手指在屏幕上画圆周运动 就像他们在画 O 一样 这可以通过 UIGestureRecognizer 实现吗 我认为这个问题的答案取决于您对圆周运动的定义以及您打算如何使用它 例如 您想知道用户手指沿着圆移动了多少度 或
  • 根据变量值生成数据总和

    我有类似这样的数据 Hosp Score Var1 Var2 Var3 1 0 5 3 0 1 1 10 8 1 1 2 11 8 2 1 3 5 3 2 2 0 6 4 0 2 2 10 6 1 2 3 10 7 2 3 1 4 3 2
  • 当条件不满足时重置 pandas cumsum [重复]

    这个问题在这里已经有答案了 我经历了不同的 stackoverflow 问题并最终发布它 因为我无法解决我面临的问题之一 我有一个如下所示的数据框 A B C group1 group1 c 12 group1 group1 c 12 gr
  • 从 PostgreSQL 函数运行 Python 脚本

    每次在 PostgreSQL 表上执行更新或插入操作时 我都面临一个 小 问题 该脚本将提取更新或插入的数据并将其写入文件 环境数据 乌班图18 04 仿生海狸 PostgreSQL 10 和 Python 3 6 SELECT FROM
  • MinGW64 无法进行 32 字节堆栈对齐(Windows x64 上的 AVX 所需),轻松解决或切换编译器?

    我正在尝试使用 AVX 指令和 Windows 64 位 我对 g 编译器很满意 所以我一直在使用它 但是 报告了一个大错误here并提出了非常粗略的解决方案here 基本上 m256 变量无法在堆栈上对齐才能与 avx 指令一起正常工作
  • 如何确定OGG文件的长度

    我正在制作节奏游戏 我需要一种快速方法来获取 ogg 文件的长度 我能想到的唯一方法是非常快速地传输文件而不播放它 但如果我有数百首歌曲 这显然是不切实际的 另一种方法是将文件的长度存储在某种属性文件中 但我想避免这种情况 我知道一定有某种
  • 无法在模拟器中启动 AVD:未找到 QT 库

    我是 Android Studio 新手 在使用模拟器时遇到问题 当我尝试运行时 它不断崩溃并显示 无法在模拟器中启动 AVD 6816 错误 android qt qt setup cpp 28 在以下位置找不到 Qt 库 C Users
  • Cocoa Interface Builder 的“属性检查器”类似窗口

    我正在制作一个 Cocoa 应用程序 我想要一个像 Interface Builder 中的 属性检查器 这样的面板 因此 顶部有大标签和可折叠 可展开的组 有谁知道我该怎么做 这是属性检查器的图像 属性检查器 http developer
  • PHP mysqli_fetch_all 给我一个空白屏幕

    我刚刚将一些内容从本地计算机推送到实时站点 但到处都是空白页面 当我使用所有东西时 我将问题追踪到 mysqli fetch all 它为什么要这样做 我该如何解决它 如果我使用 mysqli fetch array 或 mysqli fe
  • 如何在 Flutter 中解码 JSON?

    如何在 Flutter 中解码 JSON 问题很简单 但答案却不简单 至少对我来说是这样 我有一个使用大量 JSON 字符串的项目 基本上 应用程序和服务器之间的整个通信都是通过 JSON 进行的 我一直在使用JSON decode jso
  • 使用 GPUImage 过滤视频

    我在用着GPUImage在我的应用程序中并尝试过滤视频 实时视频过滤效果良好 当我尝试从文件系统将视频读入内存并使用发布在日落湖软件教程页面和 SimpleVideoFileFilter 演示中 EDIT 我意识到我原来的帖子可能没有提出足