fix: subtitle
This commit is contained in:
44
src/subtitle/vtt.js
Normal file
44
src/subtitle/vtt.js
Normal file
@@ -0,0 +1,44 @@
|
||||
function millisecondsStringToNumber(msString) {
|
||||
const cleanString = msString.trim();
|
||||
const milliseconds = parseInt(cleanString, 10);
|
||||
|
||||
if (isNaN(milliseconds)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return milliseconds;
|
||||
}
|
||||
|
||||
export function parseBilingualVtt(vttText) {
|
||||
const cleanText = vttText.replace(/^\uFEFF/, "").trim();
|
||||
const cues = cleanText.split(/\n\n+/);
|
||||
|
||||
const result = [];
|
||||
|
||||
for (const cue of cues) {
|
||||
if (!cue.includes("-->")) continue;
|
||||
|
||||
const lines = cue.split("\n");
|
||||
|
||||
const timestampLineIndex = lines.findIndex((line) => line.includes("-->"));
|
||||
if (timestampLineIndex === -1) continue;
|
||||
|
||||
const [startTimeString, endTimeString] =
|
||||
lines[timestampLineIndex].split(" --> ");
|
||||
const textLines = lines.slice(timestampLineIndex + 1);
|
||||
|
||||
if (startTimeString && endTimeString && textLines.length > 0) {
|
||||
const originalText = textLines[0].trim();
|
||||
const translatedText = (textLines[1] || "").trim();
|
||||
|
||||
result.push({
|
||||
start: millisecondsStringToNumber(startTimeString),
|
||||
end: millisecondsStringToNumber(endTimeString),
|
||||
text: originalText,
|
||||
translation: translatedText,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
Reference in New Issue
Block a user