test_subtitle_conversion.js 2.4 KB

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