# pr2resolve **Repository Path**: ersiter/pr2resolve ## Basic Information - **Project Name**: pr2resolve - **Description**: Convert Adobe Premiere Pro PRPROJ/FCP7 XML timelines to DaVinci Resolve XML, DRT and DRP. - **Primary Language**: Python - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-16 - **Last Updated**: 2026-10-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README
> **Current Status: Native DRP experimental** > > *v1.6.1 — 原生音频路由、片段标签与变速对齐修复* # pr2resolve — Premiere Pro to DaVinci Resolve Converter Premiere Pro 转 DaVinci Resolve 的时间线转换器。输出 FCP7 XML、DRT 和 DRP。 [**README in English**](README_EN.md) 代码仓库:[GitHub](https://github.com/Ersiter/pr2resolve) · [Gitee 镜像](https://gitee.com/Ersiter/pr2resolve)(首次启用须完成[同步配置与验收](.github/GITEE_SYNC.md))。开发和构建统一在 GitHub,代码和正式发行包单向同步到 Gitee。 参赛材料:[项目说明](docs/contest/submission-brief.md) · [三分钟演示脚本](docs/contest/demo-script-3min.md) · [复现清单](docs/contest/reproducibility-checklist.md) pr2resolve TUI
--- ## 目录 - [快速开始](#快速开始) - [Windows](#windows) - [macOS](#macos) - [Linux](#linux) - [源码运行](#源码运行) - [使用前准备工作](#使用前准备工作) - [TUI内操作](#tui内操作) - [CLI](#cli) - [主要功能](#主要功能) - [项目背景](#项目背景) - [CLI 参数](#cli-参数) - [工作原理](#工作原理) - [修正规则](#修正规则) - [已知限制](#已知限制) - [参考](#参考) - [License](#license) ## 快速开始 普通用户优先下载 [最新 Release](https://github.com/Ersiter/pr2resolve/releases/latest) 中对应平台的压缩包。Release 包自带可执行文件,不需要安装 Python。 镜像启用后,也可从 [Gitee 发行版](https://gitee.com/Ersiter/pr2resolve/releases) 下载相同安装包,并用 `SHA256SUMS.txt` 校验。 ### Windows 下载 `pr2resolve-v*-windows-x86_64.zip`,解压后双击 `pr2resolve.exe`,进入交互式 TUI。 ### macOS 下载 `pr2resolve-v*-macos-*.tar.gz`,解压后运行: ```bash tar -xzf pr2resolve-v*-macos-*.tar.gz chmod +x pr2resolve ./pr2resolve ``` 如果 macOS 阻止未签名二进制,请在系统安全设置中允许本次运行,或按你的本机安全策略处理。 ### Linux 下载 `pr2resolve-v*-linux-*.tar.gz`,解压后运行: ```bash tar -xzf pr2resolve-v*-linux-*.tar.gz chmod +x pr2resolve ./pr2resolve ``` ### 源码运行 需要改代码、调试或不使用 Release 包时,再使用源码运行。源码运行需要 Python 3.10+。 Windows、macOS / Linux 均可直接运行 CLI 或 TUI: ```bash python pr2resolve.py "project.prproj" -o ./output python tui.py ``` --- ## 使用前准备工作 - **Release 包用户**:不需要安装 Python。 - **源码运行用户**:需要 Python 3.10+。Windows 安装时建议勾选 `Add Python to PATH`。 - **纯数据 `.prproj` 转换**:工程中的素材路径、帧率、时码、时长和分辨率直接从 `.prproj` 对象图读取,源素材可以离线或不在本机。 - **原生 DRP 零媒体扫描**:按自动选择、`--sequence` 或 `--all-sequences` 生成一个包含所选序列的 native DRP,不启动 Resolve、不扫描媒体;模板面向 Resolve 21。 - **源参数驱动**:native 与 API 的工程默认帧率、画布取首个选中序列;序列帧率、分辨率、时长及注册表从源数据生成。媒体夹按素材路径和序列 UID 保留父子关系,不按显示名称归类。 - **序列清单**:非空判断包含音视频、字幕与数据轨道;仅含字幕的序列也会进入选择和诊断,字幕尾部计入序列时长。目标转换仍未支持的内容保留源记录并在报告中说明。 - **Motion 与时间映射**:按 ParameterID 识别本地化 Motion;XML 保留关键帧并线性近似插值,原始曲线保存在 XML 注释中。native 静态变换、正向恒速及单调 graphdict 变速视频由参数编码;曲线采用分段线性近似,保留全图及剪辑起止,报告末帧对齐残差。 - **API 变速导出**:DRT/DRP 导出后使用同一编码器修正包内的入点与时间映射,按时间线引用和轨道位置匹配;无法唯一匹配或遇到不支持的曲线时报告失败并保留源文件。API 内存中的时间线不随包内修正改变。 - **源码新增(未发布)— 音频变速**:native/API 导出包共用正向恒速与单调分段线性音频映射,按媒体类型区分相同轨号、位置的音视频片段。使用 Resolve 音高校正;源工程的音高策略尚未映射,两条路径均会明确提示。 - **API 失败处理**:请求的 DRT/DRP 未全部完成时,CLI 返回非零并保留 XML 供重试;全部成功后才按 `--no-xml` 清理中间文件。选择保留 XML 时,DRT 导出不会回收它。 - **验证边界**:本版通过离线结构和原始工程回归;Resolve 21 的受控样本已验证标签、标记、轨道状态及基础音频的导入和重开,以及恒速/分段线性视频和双节点调色的 native/API 渲染一致性。这不代表完整 Premiere/Resolve 等价。native 缩放补偿基于模板采用 fit 的假设,其他输入缩放设置尚未验证。Motion 动画、反向/定格、Bezier 变速、非默认锚点、转场、嵌套序列和生成器会明确拒绝。 - **构建维护者**:Windows Release 使用 Python 3.14,macOS/Linux 使用 Python 3.13,结合 Nuitka、UPX 和平台编译工具链构建。Python 构建依赖见 `requirements-build.txt`。 维护者可在 GitHub Actions → Release → Run workflow 选择分支,生成三平台构建附件。手动构建不发布 Release 或移动 tag;已发布的不可变 Release 无法替换资产及对应 tag。 验证源码环境: ```bash python --version ``` --- ### TUI内操作 ``` 输入相应数字选择功能: [1] 选择输入文件 (.xml 或 .prproj) [2] 设置输出目录 [3] 配置选项 (XML / DRT / DRP / Mode / Suffix / Report) [4] 开始转换 [0] 退出 ``` ### CLI ```bash # 修正 PR 导出的 XML python pr2resolve.py "input.xml" # 直接从 .prproj 解析(推荐) python pr2resolve.py "project.prproj" -o ./output # 指定序列名 python pr2resolve.py "project.prproj" --sequence "序列 01" # 导出所有非空序列 python pr2resolve.py "project.prproj" --all-sequences # DRT 输出(需要达芬奇 Studio 运行中) python pr2resolve.py "input.xml" --drt # DRP 后台导出(所有非空序列,headless) python pr2resolve.py "project.prproj" --drp # DRP 交互式导出(GUI,工程保持打开) python pr2resolve.py "project.prproj" --drp-gui # 纯数据原生 DRP(无需启动 Resolve) python pr2resolve.py "project.prproj" --native-drp # 生成修正报告 python pr2resolve.py "input.xml" --report # 只输出原生工程及报告 python pr2resolve.py "project.prproj" --native-drp --all-sequences --no-xml --report # 只看不改 python pr2resolve.py "input.xml" --diagnose-only ``` 导出的 XML 在达芬奇中导入: ``` File → Import Timeline → Import AAF, EDL, XML... → 选择 .xml 文件 ``` --- ## 主要功能 **pr2resolve 读取 Premiere Pro 时间线数据,输出 DaVinci Resolve 可直接使用的文件。** 两种输入格式: - PR 导出的 FCP7 XML (.xml) - PR 工程文件 (.prproj) — **推荐**,数据最完整 三种输出格式: - FCP7 XML — 零依赖,所有达芬奇版本均可导入 - native DRP — 主交付路径;无需启动 Resolve,写入时间线、媒体夹、轨道名称、已验证的片段标签颜色枚举及色彩配置 - API DRT/DRP — 兼容兜底路径;native schema 不兼容或导入验证失败时由用户显式选择,需达芬奇 Studio --- ## 项目背景 **源自 Premiere Pro 到 DaVinci Resolve 的实际回批经验及社区广泛反馈。PR 的 FCP7 XML 导出存在以下已知缺陷:** - **Scale 值全部显示为 100%。** PR 中缩放好的画面,XML 中写为 Scale=100%。导入达芬奇后素材尺寸远大于画面,需逐一手动计算修正值。 - **Lumetri 调色信息丢失。** XML 中调色数据以 base64 编码存储。达芬奇无法识别,直接跳过,且可能在操作时间线时导致无响应(疑似解析错误致使 I/O 进程堆积)。 - **路径格式不兼容,素材离线。** PR 导出的路径格式为 `file://localhost/C%3a/Users/...`,达芬奇不识别此格式,仅能通过 relink 恢复。 **pr2resolve 读取输入后自动修正上述问题,输出干净的 FCP7 XML。** - **为什么推荐 .prproj 而非导出 XML?** PR 自带的 XML 导出是二次加工——先生成删减版 XML 再输出,数据已失真。.prproj 是 PR 原生工程文件(gzip 压缩的 XML),可提供更多时间线、素材和效果上下文。直接提供 .prproj 即可,无需先导出 XML 再修正。 - **时间线状态与调色如何迁移?** `.prproj` 读取器按时间线片段身份提取状态、Lumetri 效果顺序、shader 与关键帧。native DRP 和 API 使用相同的 DRX 调色图,每个 Lumetri 对应一个串行节点;曝光、对比度和饱和度作静态近似,其他效果与动画保留原记录。Resolve 21 双节点载入、顺序及 50 帧两路渲染一致性已实测;与 Premiere 的色彩匹配尚未验收,不嵌入 cube LUT。 | 状态 | native DRP | API DRT / DRP | |---|---|---| | 片段标签颜色 | 写入独立片段状态;16 档预设在双时间线保存重开后回读通过;自定义 RGB 未映射 | 同一预设映射,16 色回读一致;匹配缺失或重名会告警 | | 独立轨道颜色、旗标 | 未实现 | 未实现;标签颜色不等于旗标 | | 时间线 marker | 写入位置、名称、注释、时长;Resolve 21 双时间线载入及重开回读通过;颜色暂用 Blue | 补建缺失 marker;冲突、拒绝写入会告警 | | 序列 In/Out | 写入成对、单边、清空状态;Out 换算为最后一帧 | 导出包使用相同写入;单边状态不改 API 内存中的时间线 | | 轨道名称、静音、锁定 | 音视频轨道禁用/锁定重开回读通过;音轨静音另有渲染验证 | 使用相同源状态调用官方 API,失败会告警 | | 工作区、轨道/源片段 marker | 工作区与已提取轨道 marker 保留源记录,未应用 | 未应用 | | 基础音频 | 重建 FCP 单声道轨道的 Fairlight 模型;独立单/双声道素材缓存与源声道选择 | XML 导入;双声道源与三轨错位重叠样本的渲染采样一致 | | 字幕 | 解析 FormattedTextData 的文本 runs、字体列表与源 ticks;保留原始负载,完整样式/目标轨道未实现 | 相同源记录;任意字幕 cue 的 API 写入路径未确立 | | Lumetri 层 | 每个源效果一个串行节点,使用共同 DRX Body;静态三参数近似,其他控制与动画未映射 | 应用同一 DRX;身份匹配或写入失败时不报告导出成功 | marker 的源颜色索引保留在 XML 状态注释;有索引时会提示颜色未映射。时间线 marker 已在静默 Resolve Studio 21.0.2 中完成原生包导入、保存和重开回读,覆盖零帧、范围及中文名称。In/Out 两路各六类状态的导入、保存、重开回读通过;`[5, 40)` 选区均渲染 35 帧,源帧号及像素一致。其他未注明的写入仍只有离线验证。详见 [格式依据与验收边界](NATIVE_FORMAT.md)。 基础音频的受控验收覆盖 48 kHz、16 bit PCM、双声道源分别选取左/右声道,以及三轨不同源入点和时间线位置的重叠混音;保存重开及禁用其中一轨后,每个 4 秒样本两路各 384,000 个采样值一致。原始 `.prproj` 声道布局提取、立体声轨道分组、多声道/多音频流和调音台自动化仍未完整实现。 未发布源码另验证原速、50%、200%、分段线性及带源入点的慢放:native/API 导出、导入、保存重开后,每组 384,000 个 PCM 值一致;分时段频率确认实际变速和保留音高。此结果仅覆盖受控样本,不覆盖 Premiere 音高策略、反向、定格、Bezier 或 Elastic Wave。 --- ## CLI 参数 | 参数 | 类型 | 说明 | |------|------|------| | `input` | Path | 输入文件 (.xml 或 .prproj) | | `-o`, `--output` | Path | 输出目录(默认:与输入文件同目录) | | `--report` | flag | 生成修正报告 (.md) | | `--drt` | flag | 生成 DRT 输出(需达芬奇 Studio) | | `--drp` | flag/path | 后台导出 DRP(所有非空序列) | | `--drp-gui` | flag/path | 交互式导出 DRP(所有非空序列) | | `--native-drp` | flag/path | 纯数据 native DRP(无需 Resolve;一个工程包含所选时间线,全部导出需配合 --all-sequences) | | `--all-sequences` | flag | 导出 .prproj 中全部非空序列 | | `--sequence` | str | 指定 .prproj 中的序列名 | | `--no-suffix` | flag | 输出文件名不加 `_pr2resolve` 后缀 | | `--no-xml` | flag | 跳过 FCP7 XML 输出(与 --drt、--drp 或 --native-drp 配合时) | | `--diagnose-only` | flag | 仅诊断,不修正 | | `--version` | flag | 显示版本号 | --- ## 工作原理 ``` 输入 (.xml 或 .prproj) │ ├─ XML → ElementTree 结构化解析 ├─ .prproj → gzip 解压 → ObjectID 图遍历 │ ▼ 扫描 21 项已知问题 → 按严重级别自动修正 → 23 项合规验证 │ ▼ 输出: ├─ output.xml ← 修正后的 FCP7 XML(默认输出) ├─ output.md ← 修正报告(--report 时) ├─ output.drt ← 达芬奇原生时间线(--drt 时,需达芬奇运行) └─ output.drp ← 达芬奇工程导出(--drp / --drp-gui 时) ``` --- ## 修正规则 | 级别 | 规则 | 说明 | |------|------|------| | C0 | version | `xmeml version="4"` → `"5"` | | C1-C2 | format | 补全 video/audio `` | | C3-C4 | rate | 补全 `` / `` | | C5 | pathurl | `file://localhost/...` → `file:///...` | | C6 | media 顺序 | video 移到 audio 前面 | | M0 | Lumetri | XML: 移除不可识别效果;native/API: 共用串行 DRX 图,静态三参数近似,其他参数与关键帧保留源记录 | | M1-M2 | clipid/track | 补全 `` / `` | | M4 | link | 同源素材生成 `` | | M5 | file details | 补全 `` 的 samplecharacteristics | | M6 | 元素顺序 | clipitem 子元素按 FCP7 规范排序 | | M7 | Scale | 源分辨率 / 时间线分辨率 = fit scale | | N1-N7 | 细节 | timecode / 浮点精度 / 帧率一致性 / displayformat 等 | 所有规则自动应用,不提供开关。这些修正是必需的——不修正将导致导入失败或画面错误。 --- ## 已知限制 1. **PR 文字标题** — 导入达芬奇后常为空。FCP7 XML 自身限制,无法修正。 2. **嵌套序列** — 经常被展平或导入失败。 3. **素材移动** — XML 存储绝对路径,素材搬移后需在达芬奇 relink。 4. **达芬奇导入设置** — 建议取消 "Use sizing information",避免双重缩放。 5. **免费版达芬奇** — 本项目的 DRT/DRP 路径按 DaVinci Resolve Studio 验证;免费版不作为支持目标。XML 不受影响。 6. **Lumetri 空间与时间运算** — 当前 DRX 图仅近似曝光、对比度、饱和度;降噪、锐化、模糊、暗角、曲线及关键帧尚未映射。多 Lumetri 顺序已保留,尚不能视为跨软件调色等价。 7. **色彩空间词汇差异** — native DRP 按模板映射 Rec.709、ACEScct 与 Rec.2100 HLG 配置;不同 HDR 项目与输入色彩空间仍需实机核对。API DRP 按源序列 UID 请求各时间线的设置,并按素材路径请求已知输入色彩空间;实际接受情况及两路色彩一致性尚未验证。 8. **原生工程仍需导入验收** — 序列注册、媒体引用、marker、调色图和时间映射的离线检查不能证明画面、音频、Fairlight 多音轨及切换稳定性。marker、In/Out、标签及基础音轨已有上述实机结果;源起始时码及视频轨道禁用后的渲染仍需核对,旗标尚未实现。`--report` 不依赖 XML 输出,导出拒绝后也可查看已生成的报告。 原生字段依据、行业实现比较和后续验收方法见 [转换实现说明](NATIVE_FORMAT.md)。 --- ## 参考 - [PRPROJ-READER](https://github.com/sergeiventurinov/PRPROJ-READER) — .prproj 格式逆向 - [prproj_downgrade](https://github.com/snorkem/prproj_downgrade) — .prproj 版本降级工具 - [ppro-scripting](https://ppro-scripting.docsforadobe.dev) — Adobe 对象模型文档 - [DaVinci Resolve Scripting API](https://resolvedevdoc.readthedocs.io/) — 达芬奇 API 参考 - [DaVinci Resolve MCP](https://github.com/samuelgursky/davinci-resolve-mcp) — 达芬奇 MCP 开源项目 --- ## License [MIT LICENSE](./LICENSE)