REAPER 自动化字幕生成脚本

需求细分

  1. 文本准备
  2. 时间段打点
  3. 输入给item
  4. 根据item文本自动添加带特定字符的效果器

item的选择

取二者优点,采用empty item作为文本输入,生成midi item承载字幕FX。

实现步骤

播放中打点

即在播放中马上确定empty item的起始、结束与长度。采用这两个action组合:

实际效果:

播放中打点

批量输入字幕

采用python自带库tkinter,强制要求一行对应一个item。麻烦的地方在于检测Text Widget的更改来生成行数的提示,网上有不少类似实现可以参考,使用Change和Modify来检测无区别。

实际效果:

输入字幕

生成字幕轨道

刚开始想采用生成的轨道为“子轨道”,实现方式为:

  1. 记录选中轨以外轨道的层级信息
  2. 删除选中轨中的子轨道
  3. 生成子轨道
  4. 还原选中轨以外轨道的层级信息

如此步骤是因为REAPER一旦把轨道变成父轨道,在父轨道下方的轨道自动会成为子轨道。

后来放弃上述方案,因为某些情况下,多个子轨道使用GetMediaTrackInfo_Value方法获取的最后一个子轨道depth不正确。在经过轨道移动等操作后又正常,疑似是bug。

可能直接获取chunk的方式会获得正常的层级数,我没有测试

最终使用的是直接生成一条字幕轨,并根据指定轨道名字删除本来已存在的字幕轨。

实际效果:

生成字幕轨道

脚本地址

测试环境:

  • Python 3.9.1
  • REAPER 6.19
  • sws 2.12

脚本gist地址:REAPER自动化字幕生成脚本 · GitHub

视频演示:REAPER自动化字幕生成脚本_哔哩哔哩_bilibili

扩展畅想

  • 导入导出srt文件(已有类似脚本)
  • 对audio item做语音识别
4 个赞