需求细分
- 文本准备
- 时间段打点
- 输入给item
- 根据item文本自动添加带特定字符的效果器
item的选择
取二者优点,采用empty item作为文本输入,生成midi item承载字幕FX。
实现步骤
播放中打点
即在播放中马上确定empty item的起始、结束与长度。采用这两个action组合:
实际效果:
批量输入字幕
采用python自带库tkinter,强制要求一行对应一个item。麻烦的地方在于检测Text Widget的更改来生成行数的提示,网上有不少类似实现可以参考,使用Change和Modify来检测无区别。
实际效果:
生成字幕轨道
刚开始想采用生成的轨道为“子轨道”,实现方式为:
- 记录选中轨以外轨道的层级信息
- 删除选中轨中的子轨道
- 生成子轨道
- 还原选中轨以外轨道的层级信息
如此步骤是因为REAPER一旦把轨道变成父轨道,在父轨道下方的轨道自动会成为子轨道。
后来放弃上述方案,因为某些情况下,多个子轨道使用GetMediaTrackInfo_Value方法获取的最后一个子轨道depth不正确。在经过轨道移动等操作后又正常,疑似是bug。
可能直接获取chunk的方式会获得正常的层级数,我没有测试
最终使用的是直接生成一条字幕轨,并根据指定轨道名字删除本来已存在的字幕轨。
实际效果:
脚本地址
测试环境:
- Python 3.9.1
- REAPER 6.19
- sws 2.12
脚本gist地址:REAPER自动化字幕生成脚本 · GitHub
视频演示:REAPER自动化字幕生成脚本_哔哩哔哩_bilibili
扩展畅想
- 导入导出srt文件(已有类似脚本)
- 对audio item做语音识别