REAPER自动化字幕生成脚本

Automatic generate subtitle track using reascript in REAPER.

Posted by Tee on January 14,2021

需求细分

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

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地址:https://gist.github.com/wastee/b3184227e51b3efc8c45a4a6daa0e683

视频演示:https://www.bilibili.com/video/BV1Sz4y1U7qr/

扩展畅想

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

本作品采用知识共享署名 4.0 国际许可协议进行许可。