Final Cut Pro X效果插件开发总结

一、介绍

      最近公司需要针对Final Cut Pro(FCP)开发一款效果插件,用于对公司自己开发的视频格式进行后期处理。Final Cut Pro是苹果公司推出的一款视频剪辑软件,因此需要在OSX平台上进行开发。目前最新版本的Final Cut Pro已经更名为Final Cut Pro X,因此也可简称FCPX。网络上针对FCPX的可用插件不少,但是相关的开发资料就显得非常匮乏,Google了半天都没找到定点信息。没办法,关键时刻还得去看看官方文档。寻寻觅觅终于还是发现了一些有用的信息。公司目前已经在Adobe Premiere Pro CC SDK的基础上开发了一款适用于Premiere Pro和After Effects的导入插件。因此,初步想法是在Final Cut Pro X上也开发一款类似的插件,用于实现自有视频格式的导入、播放、剪辑等功能。但是FCPX并没有提供类似的SDK,唯一找到的一个叫FxPlug的插件框架还是用来开发效果插件的。既然如此,就只好去使用FxPlug来尝试一下能否实现目标功能了。

      Final Cut Pro是苹果公司开发的一款视频剪辑软件,因此需要在OS X平台上运行。开发前需要准备一台苹果电脑,并下载安装好Final Cut Pro及XCode。另外,在发布FxPlug之前还需要在Motion中进行处理才能让FCPX识别。Motion是苹果公司开发的另外一款效果编辑软件,类似于Adobe推出的After Effects。所以,还需要安装好Motion才能完整的配置好开发工具链。

二、FxPlug插件框架

    FxPlug插件框架可以开发两种类型的插件:Filter和Generator。Filter(滤镜)需要有视频片段输入,在输入片段的基础上做视效处理再输出;Generator则不要求输入视频片段,可以合成一些视频片段。这里以Filter类型插件作为例子讲解整个开发过程。

    首先需要到苹果开发者官网下载SDK:FxPlug SDK,最新版已经出到3.1了。

下载下来的是一个DMG镜像文件,双击加载可以看到如下三份文件:pkg文件是真正的SDK文件,点击安装后是其实就是释放一些framework;Developer文件夹下是一些模板工程,可以参考这些模板工程来编写我们自己的逻辑代码。

我们以模板工程CIFxPlug作为例子,在XCode中打开工程文件,可以看到总共有四个文件。其中CIFxPlug.h/CIFxPlug.m是插件的主文件,而CIFxPlugCache.h/CIFxPlugCache.m则实现了一个简单的缓存类,用于缓存CIFilterCIContext这两个对象。这个工程演示了在FxPlug插件框架中使用Core Image来处理视频的方法。作为演示,我们直接编译生成CIFxPlug.fxplug插件文件即可。

在发布插件之前,我们需要先在Motion中进行Rig操作。这里需要在XCode进行Archive操作,签名打包后可以将得到的CIFxPlug.fxplug文件夹复制到/Library/Plug-Ins/FxPlug/目录下。如果用户从来没有装过其他外部插件,可能不存在这个路径,此时可以手动创建这些路径。

此时可以启动Motion,选择Final Cut 效果新建项目。在滤镜大类下可以看到我们新开发的CIFxPlug插件。在顶部可以看到关于插件的简单描述。

要生成简单的效果,可以简单的将CIFxPlug插件拖到右边的Drop Zone即可。然后保存发布,这里要填好模板名称和类别。类别一般是公司名称,模板名称则是效果的具体名字。因为一个公司可能开发多个效果插件,填一样的类别名称则可以将多个插件归类到一起。

发布之后即可在FCPX中实时看到新发布的插件,而无需重启FCPX。之后就可以正常的和使用内置效果插件一样,使用我们自己开发的插件了。

实际上,在Motion中进行处理有两个目的:一是为了生成可以让FCPX可以识别的文件格式,这样才能正确的被FCPX加载;二是为了做Rig操作,具体来讲就是为插件提供一些小widgets,方便用户对插件的参数进行微调。这个过程也叫作Rig。widgets主要分成三类:slider, popup, checkbox。

三、插件发布流程

(1)在XCode中编译生成FxPlug插件,在XCode中执行Archive操作,签名打包。

(2)拷贝FxPlug插件到/Library/Plug-Ins/FxPlug/目录下,必要的时候手动创建目录。

(3)打开Motion新建项目。本人项目中演示的是滤镜(Filter)插件的实现,所以选择Final Cut Effects项目。

(4)在Motion资源库中选择滤镜下,找到自己开发的滤镜插件,拖到右侧。

(5)存储当前项目,填好类别和主题,保存即可在FCPX中看到新发布的插件。(实际文件可以在用户根目录下的Movies中找到)

(6)在FCPX中使用FxPlug插件。

四、遇到的问题

(1)在FxPlug插件中调用动态库出现Code Signature Invalid异常,导致Motion崩溃。在使用dylib时,Motion崩溃退出时经常报Code Signature Invalid异常。后来经过调试发现,原来是在XCode中做Archive操作时会对dylib做签名操作。后来手动使用install_name_tool修改了dylib的path时,这时签名就发生了改变。系统在加载dylib是就会报Code Signature Invalid错误。那要修改dylib的path怎么办呢?一种解决办法就是:把所有的dylib的path修改好后放到工程目录下,在XCode中引用这些dylib,在build phase中添加Copy Files Phase,这一步可以让XCode打包时自动拷贝签名好的dylib。这样就解决了Code Signature Invalid异常问题。

(2)install_name_toolotool工具的使用(两者只能在工程目录下的Libs下使用)。这两个工具配合起来用于修改path。otool用于查看dylib和可执行文件依赖的动态库;Install_name_tool则用于修改。

(3)Objective C和C++混合编程。OC与C/C++混合编程是一个常见的场景,在公司的项目中,需要在FxPlug插件中调用公司用C++开发的一个渲染库。渲染库以dylib和头文件的形式提供。适配的方式是,将原先的.m文件修改成.mm文件,然后在这个.mm文件中引入渲染库头文件。这样编译就没问题了。如果在.h文件中引入渲染库头文件,会产生编译错误的。因为#include预处理其实就是代码替换,这样一来C++代码和OC代码在.h文件中就混杂在一起了,因而无法编译通过。在.mm文件中包含头文件时,同样也有代码替换的这个过程,但是为什么就可以呢?因为.mm扩展名本来就允许OC和C++代码共存呀。

五、总结

      苹果下的开发太封闭了,针对FCPX插件开发的资料也非常少,官方文档在某一程度上也显得语焉不详。英文文档在理解上也存在一定的差异,因此在摸索过程中碰了不少的壁。此外,Motion和Final Cut Pro自身的日志也非常少。有时候会莫名其妙的崩溃,以至于排查代码错误显得非常的困难。幸好Motion和FCPX在崩溃时有一部分调用堆栈信息,在一定程度上可以帮助缩小问题范围。这次项目中要用的插件也基本上开发完成了,初步能够实现预定的效果。整个过程虽然痛苦,但是最终还是完成了任务,算是有始有终了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Hadoop实操

如何在CDH中安装和使用StreamSets

StreamSets由Informatica前首席产品官Girish Pancha和Cloudera前开发团队负责人Arvind Prabhakar于2014年...

7.5K11
来自专栏熊二哥

Linux快速入门01-基础概念

4年多前,刚到上海时报过一个关于Oracle的培训班,在那里接触到了Linux,不过一直都没真正去试着使用它。现在经过慢慢的成长,越来越觉得,Linux是每一个...

2325
来自专栏木可大大

我的Mac应用清单

相信大家或多或少都会碰到这种问题:Mac到底有什么好的,同样或者更低的价钱,我可以买一个配置更好的Windows电脑了。首先,Mac系统是基于Unix系统的,因...

2403
来自专栏云瓣

用 Node.js 把玩一番 Alfred Workflow

作为 Mac 上常年位居神器榜第一位的软件来说,Alfred 给我们带来的便利是不言而喻的,其中 workflow(工作流) 功不可没,在它上面可以轻松地查找任...

4533
来自专栏张戈的专栏

WordPress发布文章主动推送到百度,加快收录保护原创

工作实在太忙,也没时间打理网站。最近公司额外交待了一些网站 SEO 方面的优化任务让我关注(这就是啥都要会、啥都要做的苦逼运维的真实写照了...)。 于是抽空看...

3486
来自专栏FreeBuf

跨平台版中国菜刀Cknife发布

Burp已经成了绿帽子门必不可少的工具,相信大家都装有Java环境,本软件支持1.7+以及所有安装了环境的系统。1.6后续会考虑兼容。 一直都有想写一款真正...

7117
来自专栏JackieZheng

Hadoop阅读笔记(五)——重返Hadoop目录结构

  常言道:男人是视觉动物。我觉得不完全对,我的理解是范围再扩大点,不管男人女人都是视觉动物。某些场合(比如面试、初次见面等),别人没有那么多的闲暇时间听你诉说...

22710
来自专栏木可大大

我的Mac应用清单

相信大家或多或少都会碰到这种问题:Mac到底有什么好的,同样或者更低的价钱,我可以买一个配置更好的Windows电脑了。首先,Mac系统是基于Unix系统的,因...

1761
来自专栏北京马哥教育

Linux 新手必会的21条命令合集

2107
来自专栏从零开始学 Web 前端

代码阅读——十个C开源项目

Webbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以...

4953

扫码关注云+社区

领取腾讯云代金券