如何读取和解析带有Javascript的srt字幕文件?

How to read and parse srt Subtitle file with Javascript?

我正在尝试制作一个程序来翻译来自给定路径的字幕文件。 该程序在 electron 中 运行 - 所以我可以访问计算机的文件。 问题是我找不到关于如何读取和解析 srt 文件的解释,这可能吗?

    function translateSubs(path, newPath){
      var srt = readFile(path)
      var translatedOutput = []
      srt.data.foreach(line => {
        line.text = translateToEnglishline.text()
      })
      parseFile(srt, newPath)
    }

查看SRT File Format我们可以看到文件中的数据示例是:

1
00:05:00,400 --> 00:05:15,300
This is an example of
a subtitle.

2
00:05:16,400 --> 00:05:25,300
This is an example of
a subtitle - 2nd subtitle.

既然我看到你想翻译文本,那么你需要做的就是获取text部分,翻译并覆盖它。

有很多方法可以做到这一点,但我会如何将文件加载到 string[] 数组中。然后遍历它,在空行上分隔并将其解析为单独的对象。现在我有看起来像这样的对象

class SubItem
{
    string[] lines
}

第三部分遍历每个 SubItem,翻译 lines 中的每个 string,除了前两个(第一个是 ID,第二个时间范围)。

现在我有一系列已翻译的SubItems。将它们放回带有空行分隔符的文件中,您就完成了。

所以我是这样做的:

var { default: srtParser2} = require('srt-parser-2');
var parser = new srtParser2()
const fs = require('fs');
//srt => json
fs.readFile(path,(err,data) =>{
  if (err) {
    console.error(err);
    return;
  }
  var subObj = parser.fromSrt(data.toString())
  console.log("lines in srt:", subObj.length)
  //json => srt
  outputSrt = ""
  subObj.forEach(item =>{
    translatedSub += "\n" + item.id + "\n"+ item.startTime + " --> " + item.endTime + "\n" + item.text + "\n" 
  })
  fs.writeFile(outputPath, outputSrt, (err) => {console.log(err)})
  console.log("wrote file into path:", outputPath)
})

正在阅读 srt: 首先,我们使用 FS 读取 srt,然后我们将输出转换为字符串并使用 srt-parser-2 读取它,这为我们提供了 JSON

中的 srt

正在创建 Srt: 我们创建具有以下格式的新字符串:

1
00:00:11,544 --> 00:00:12,682
Hello

2
00:00:17,123 --> 00:00:19,345
There

3
00:00:30,123 --> 00:00:31,345
General Kenobi

然后我们将其写入文件。

有关详细信息,您可以在此处查看 srt-parser-2 文档: https://www.npmjs.com/package/srt-parser-2