如何读取和解析带有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
我正在尝试制作一个程序来翻译来自给定路径的字幕文件。 该程序在 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