使用OpenTimelineIO转换FCP文件至Kdenlive时遇SerializableCollection错误
问题核心
从修复后的FCP XML导入OpenTimelineIO后得到的是SerializableCollection对象(内部包含目标Timeline),但PyPI版本的Kdenlive适配器仅支持直接处理单个Timeline对象,调用input_otio.duration()时,SerializableCollection无此方法,触发AttributeError。
解决方法
方法1:修改XML文件(无需改动代码)
打开ep4_fixed.fcpxml,找到包裹时间线的顶层集合节点(如<library>),直接提取其中的<timeline>节点,保存为新的XML文件。用新文件执行otioconvert,此时导入结果为单个Timeline,适配器可正常处理。
方法2:修复Kdenlive适配器源码
找到PyPI安装的适配器文件(路径:/usr/local/lib/python3.11/site-packages/opentimelineio_contrib/adapters/kdenlive.py),修改write_to_string函数开头,增加SerializableCollection的处理逻辑:
def write_to_string(input_otio, **kwargs): # 处理SerializableCollection,提取内部的Timeline对象 if isinstance(input_otio, otio.schema.SerializableCollection): # 遍历集合,取第一个Timeline for item in input_otio: if isinstance(item, otio.schema.Timeline): input_otio = item break rate = input_otio.duration().rate # 后续代码保持不变
保存修改后,重新运行转换命令即可。
方法3:正确安装带Kdenlive适配器的源码版
主分支OTIO源码不含Kdenlive适配器,因为它属于独立的opentimelineio-contrib项目,安装步骤:
- 卸载现有包:
pip uninstall opentimelineio opentimelineio-contrib -y - 克隆并安装contrib项目:
git clone https://github.com/PixarAnimationStudios/OpenTimelineIO-contrib.git cd OpenTimelineIO-contrib pip install -e . - 之后可按方法2修改源码,或提交PR修复兼容性问题。
验证
运行转换命令:
otioconvert -i /path/to/modified_file.fcpxml -o /path/to/output.kdenlive
无报错后,直接在Kdenlive中导入生成的.kdenlive文件。
内容的提问来源于stack exchange,提问作者ginjaemocoes
相关产品推荐
相关产品推荐

