123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- // 测试字符串转字幕功能
- function convertStringToSubtitles(text) {
- if (!text || typeof text !== 'string') {
- return [];
- }
-
- // 按照标点符号分割文本,保留标点符号
- const sentences = text.split(/([。!?!?])/)
- .filter(part => part.trim() !== '')
- .reduce((acc, part, index, arr) => {
- if (index % 2 === 0) {
- // 文本部分
- const nextPart = arr[index + 1] || '';
- acc.push(part + nextPart);
- }
- return acc;
- }, [])
- .filter(sentence => sentence.trim().length > 0);
-
- // 如果没有明显的分句标点,按长度分割
- if (sentences.length <= 1) {
- const maxLength = 30; // 每段最大字符数
- const textParts = [];
- for (let i = 0; i < text.length; i += maxLength) {
- textParts.push(text.substring(i, i + maxLength));
- }
- sentences.splice(0, sentences.length, ...textParts);
- }
-
- // 为每个句子分配时间戳
- let currentStartTime = 0;
- return sentences.map((sentence) => {
- const duration = Math.max(3, Math.ceil(sentence.length / 8)); // 根据文本长度计算时长
- const startTime = currentStartTime;
- const endTime = startTime + duration;
- currentStartTime = endTime;
- return {
- startTime,
- endTime,
- text: sentence.trim()
- };
- });
- }
- // 测试数据
- const testString = "你好1123,我是本次面试的面试官,欢迎参加本公司的线上面试!面试预计需要15分钟,请你提前安排在网络良好、光线亮度合适、且相对安静的环境参加这次面试以免影响本次面试的结果。如果你在面试过程中遇到问题,请与我们的招聘人员联系。";
- console.log('原始字符串:');
- console.log(testString);
- console.log('\n转换后的字幕格式:');
- const result = convertStringToSubtitles(testString);
- result.forEach((item, index) => {
- console.log(`${index + 1}. 时间: ${item.startTime}s - ${item.endTime}s, 内容: "${item.text}"`);
- });
- console.log('\n期望的格式类似:');
- console.log('1. 时间: 0s - 5s, 内容: "你好1123,我是本次面试的面试官,欢迎参加本公司的线上面试!"');
- console.log('2. 时间: 5s - 13s, 内容: "面试预计需要15分钟,请你提前安排在网络良好、光线亮度合适、且相对安静的环境参加这次面试以免影响本次面试的结果。"');
- console.log('3. 时间: 13s - 20s, 内容: "如果你在面试过程中遇到问题,请与我们的招聘人员联系。"');
|