gpt4 book ai didi

javascript - 在指定时间遍历 JSON 对象(例如电影字幕)

转载 作者:行者123 更新时间:2023-11-30 11:43:47 25 4
gpt4 key购买 nike

首先,如果标题不够准确,请见谅,如果有人有建议,我们非常欢迎。我现在将解释我的问题。我有一个 JSON 文件(尽管这里是一个 javascript 对象),我想遍历它。这是一部电影的字幕文件,我想像您期望的那样准确地显示文本:仅在指定的时间显示。

我没有使用视频播放器或其他任何与此相关的东西,所以它只会由 nodejs 处理这个文件。我确实知道如何使用简单的 for 循环遍历它,但我想知道如何遍历它并在各个 javascript 对象中指定的准确时间进行循环?

 { id: '54',
startTime: '00:03:46,572',
endTime: '00:03:53,160',
text: 'Hello this is a text'
},
{ id: '55',
startTime: '00:03:53,160',
endTime: '00:03:58,799',
text: 'To be precise, the subtitle file of a movie'
},

最佳答案

首先,您必须将 startTimeendTime 解析为毫秒。

您可以只使用 :, 字符拆分字符串,并计算它代表的毫秒数。

function parseTime(t) {
var segments = t.split(':');
var ms = parseInt(segments[2].split(',')[1]);
var h = parseInt(segments[0]);
var m = parseInt(segments[1]);
var s = parseInt(segments[2]);
return h * 60 * 60 * 1000 + m * 60 * 1000 + s * 1000 + ms;
}

接下来,检查您的数组,并将时间转换为毫秒:

function convertToMs(arr) {
for (var i = 0; i < arr.length; i++) {
arr[i].startTime = parseTime(arr[i].startTime);
arr[i].endTime= parseTime(arr[i].endTime);
}
return arr;
}

现在,从数组中的第一个元素开始,并在每次调用时设置对下一个元素的回调,除非您已到达数组的末尾。

function showSubtitles(arr, i) {
setTimeout(function() {
console.log(arr[i].text);
setTimeout(console.clear, arr[i].endTime - arr[i].startTime); // Make the subtitle "disappear"
i++;
if (arr.length > i) {
showSubtitles(arr, i);
}
}, i == 0 ? (arr[i].startTime) : (arr[i].startTime - arr[i-1].startTime));
}

现在使用你的数组:

var subtitles = [{
id: '54',
startTime: '00:03:46,572',
endTime: '00:03:53,160',
text: 'Hello this is a text'
},
{
id: '55',
startTime: '00:03:53,160',
endTime: '00:03:58,799',
text: 'To be precise, the subtitle file of a movie'
}];
subtitles = convertToMs(subtitles);
showSubtitles(subtitles, 0);

这是一个工作 fiddle ,字幕时间较短:https://jsfiddle.net/6oxfx4s1/2/

关于javascript - 在指定时间遍历 JSON 对象(例如电影字幕),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41695916/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com