camdarley/fcp-keyg
GitHub: camdarley/fcp-keyg
对 Final Cut Pro 1–7 旧版专有二进制工程格式进行逆向工程并公开完整规范,附带可用的数据提取与导出工具,解决遗留剪辑工程无法被现代软件打开的数字保存问题。
Stars: 0 | Forks: 0
# fcp-keyg — Final Cut Pro 1–7 二进制工程格式文档
**Apple Final Cut Pro 旧版二进制工程格式(`.fcp`,magic 为 `KeyG`)的首份公开规范,附带可用的提取工具。**
从 1999 年到 2011 年,Final Cut Pro(版本 1 到 7)以未公开的专有二进制格式保存工程。FCP 7 于 2011 年停止开发,目前没有任何现代软件可以打开这些文件——然而, countless 后期制作档案库中依然保存着成千上万个此类文件,其中包含的剪辑、时间线、标记和媒体引用如果不进行处理就会面临丢失的风险。
本项目是净室逆向工程的研究成果,该过程完全通过分析工程*数据文件*完成(未对 Apple 软件进行反编译,未规避任何技术保护措施),其目的在于实现互操作性和数字保存。
## 目录
| 文件 | 描述 |
|------|-------------|
| [`SPEC_FCP_KeyG_EN.md`](SPEC_FCP_KeyG_EN.md) | 完整的格式规范(英文) |
| [`SPEC_FCP_KeyG.md`](SPEC_FCP_KeyG.md) | 完整的格式规范(法文,原始版本) |
| `fcp_timelines.py` | 时间线提取器——包含时间线/源入出点的序列、轨道和片段。自动检测字节序(PowerPC/Intel)并自动校准文件的动态属性 ID。支持 CSV/JSON 输出。 |
| `fcp_export_xml.py` | FCP7 XML (XMEML v4) 导出器——将恢复的时间线导入 DaVinci Resolve 或 Premiere Pro。 |
| `fcp_extract.py` | 头文件、字符串、项目表和媒体引用(包含 POSIX 路径的 Alias 记录)。 |
| `fcp_items.py` | 带有持续时间和尺寸的媒体库项目列表。 |
| `process_vault.sh` | 批量处理整个 FCP 自动保存库并输出为 CSV + XML。 |
## 快速开始
```
# 项目里有什么?
python3 fcp_extract.py MyProject.fcp
# 恢复时间线
python3 fcp_timelines.py MyProject.fcp --csv timelines.csv
# 导出为 FCP7 XML 用于 DaVinci Resolve / Premiere Pro
python3 fcp_export_xml.py MyProject.fcp MyProject.xml
```
除了 Python 3 之外没有其他依赖。
## 格式概览
- Magic:`A2 4B 65 79 47 0A 0D 0A`(`.KeyG`——源自 *KeyGrip*,即 FCP 在 Macromedia 时期的最初代号)。
- 采用序列化的属性树,在 PowerPC 时代的文件中为大端序,在 Intel 时代的文件中为小端序。
- 数字属性 ID **随文件而动态变化**(指向留存的键名引用)——任何解析器都必须通过统计方式发现它们,而不能将其硬编码。
- 通过存储在工程项目表中的分层 ID 范围来解析持久化对象 ID。
- 媒体引用是经典的 Mac OS Alias 记录,包含 POSIX 路径。
请参阅[规范](SPEC_FCP_KeyG_EN.md)了解全貌,包括尚未解决的问题(欢迎贡献)。
## 状态与限制
已在 2007–2013 年的真实工程语料库上进行了验证(FCP 5 至 7,PAL)。已知缺陷:小端序文件中的音频片段布局、小端序文件中的轨道分组问题,NTSC/丢帧(drop-frame)未经测试,FCP 1–3(Mac OS 9)未经测试。
非常欢迎提供带有样本文件的问题报告。
## 许可协议
- 代码(`*.py`,`*.sh`):[MIT 许可证](LICENSE)
- 文档(`SPEC_*.md`,本 README):[CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)
标签:Cutter, Final Cut Pro, Homebrew安装, Python, 云资产清单, 多媒体工具, 数字存档, 数据提取, 文件格式规范, 无后门, 逆向工具, 逆向工程