说起SWF转FLA这事,我一开始是觉得挺邪乎的,感觉这就像是想把烤好的面包再还原成面粉一样,是不是有点逆天?但项目里真遇到这需求了,那就得硬着头皮上,没得挑。
前段时间手里有个老项目,里面好些动画效果都是老早以前用Flash(现在叫Adobe Animate了)做出来的,存的都是编译好的SWF文件。现在老板说要修改其中的几个关键动画,但原始的FLA工程文件找不到了,那叫一个抓瞎。没FLA,怎么改?硬着头皮研究怎么把SWF还原成FLA。
我最开始想走捷径,就在网上搜“SWF to FLA converter”,出来一堆在线工具。我随便挑了几个点进去,上传了我的SWF文件,等着它给我吐出FLA。结果?有的直接报错,有的转换后打开FLA文件,里头乱七八糟,动画时间轴卡死了,图层错位,根本没法编辑。那些工具大多只能反编译出个大概的结构,遇到复杂的ActionScript或者影片剪辑,基本就抓瞎了。白白浪费了我不少时间,感觉像是给别人送钱去了。
吃过亏后,我就知道不能指望那些“一键解决”的玩意儿了。我开始寻找那些专门做Flash反编译的桌面工具。我记得下载了几个口碑不错的老牌工具,什么JPEXS Free Flash Decompiler之类的。

这个过程很折腾,因为SWF是运行时格式,反编译是“猜测”原始结构。有些复杂的嵌套和动态加载的内容,工具解析起来会打折扣。我得一遍遍调整工具的参数,尽量保持结构清晰。
把反编译出来的东西导出来后,我得导入到Adobe Animate里头去。我尝试导入了它生成的各种格式文件,大部分时候,它导出的不是一个标准的FLA,而是XML结构或者类似格式的工程描述文件。
我需要做的,就是把工具扒出来的资源,手动在Animate里重新搭框架。把那些反编译出来的图层信息和时间轴关键帧数据,一点点对上去。
特别是那些动画过渡效果,完全靠机器翻译是不行的,我得看着反编译出来的代码逻辑,在Animate的时间轴上手动调整补间动画的属性和帧率。这基本就是个体力活,一个几秒钟的动画,我可能要花半天时间去对齐关键帧。

代码部分是最头疼的。旧版的ActionScript 1/2,和现在Animate用的ActionScript 3.0,语法和API差得远了。反编译出来的代码,我得通读一遍,理解它原来想干然后用现代的语法重新写一遍,特别是和外部交互的部分。
写完一段,我就得立刻测试,看看动画播放是否顺畅,交互逻辑是否触发。我来回弄了好几次,才把最重要的几个动画流程跑通。我把修改好的内容保存成了新的FLA文件,这才算交差了事。
说白了,SWF转FLA这事,压根没有“轻松搞定”的套路,所谓的工具只是帮你把散落的零件找回来,怎么把零件重新组装成能用的东西,还得靠自己动手啃。