javascript - 使用JS将毫秒转换为SRT时间

标签 javascript jquery srt

我有这样的输入:

start: 0.21 | duration: 0.30 | text: Subtitle Text 1 
start: 0.32 | duration: 0.52 | text: Subtitle Text 2 

这个输入需要转换成SRT格式,所以就变成这样了:

1
00:00:00,210 --> 00:00:00,300
Subtitle Text 1

2
00:00:00,320 --> 00:00:00,520
Subtitle Text 2

JS:

function formatMilliseconds($milliseconds) {
    $seconds = Math.floor($milliseconds / 1000);
    $minutes = Math.floor($seconds / 60);
    $hours = Math.floor($minutes / 60);
    $milliseconds = $milliseconds % 1000;
    $seconds = $seconds % 60;
    $minutes = $minutes % 60;
console.log( $hours, $minutes, $seconds, $milliseconds); // 0 0 0 0.21

}

格式毫秒(0.21)

最佳答案

首先,您需要将输入格式转换为可处理的格式,类似于

var subtitles = [
{
  start: 0.21,
  end: 0.3,
  text: "Subtitle Text 1"
},
{
  start: 0.32,
  end: 0.52,
  text: "Subtitle Text 2"
}
];

请注意,我在这里选择了“结束”而不是“持续时间”,因为在我看来,“持续时间”意味着字幕在开始 + 持续时间(0.21 + 0.3 = 0.51)秒处结束。

格式化函数几乎是正确的,但需要以毫秒形式提供输入值,而不是十进制秒值。对于输出,您还需要用零填充小时/分钟/秒。您最好为此使用辅助函数,您可以在其中指定目标字符串长度,但对于本示例,我只是内联完成的:

var subtitles = [
    {
      start: 0.21,
      end: 0.3,
      text: "Subtitle Text 1"
    },
    {
      start: 0.32,
      end: 0.52,
      text: "Subtitle Text 2"
    }
  ],
  srtCount = 0;

function srtTimestamp(seconds) {
    var $milliseconds = seconds*1000;
    
    $seconds = Math.floor($milliseconds / 1000);
    $minutes = Math.floor($seconds / 60);
    $hours = Math.floor($minutes / 60);
    $milliseconds = $milliseconds % 1000;
    $seconds = $seconds % 60;
    $minutes = $minutes % 60;
    return ($hours < 10 ? '0' : '') + $hours + ':'
         + ($minutes < 10 ? '0' : '') + $minutes + ':'
         + ($seconds < 10 ? '0' : '') + $seconds + ','
         + ($milliseconds < 100 ? '0' : '') + ($milliseconds < 10 ? '0' : '') + $milliseconds;
}

function inputToSRT(sub_in) {
  return ++srtCount + "\r\n" + srtTimestamp(sub_in.start) + " --> " + srtTimestamp(sub_in.end) + "\r\n" + sub_in.text + "\r\n\r\n";
}
  
for (var i=0; i<subtitles.length; i++) {
  console.log(inputToSRT(subtitles[i]));
}

关于javascript - 使用JS将毫秒转换为SRT时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46864913/

相关文章:

javascript - 如何从保存的 base64 图像中裁剪未使用的 Canvas 空间?

javascript - 在mousedown事件中,是否可以取消产生的点击事件?或者传递信息给它?

jquery - Uncaught ReferenceError - Jquery 冲突

jquery - 将图像附加到 Jquery UI 容器

android - 寻找 addTimedTextSource 的工作示例,用于从 Android 4.1 中的 .srt 文件向视频添加字幕

video - 如何在 FFMpeg 中刻录字幕 (SRT) 文件和时间码

javascript - MomentJS - 将日期时间从 UTC 转换为不同的时区

javascript - 尽管有值,HTML 输入字段仍返回空白

javascript - Google 饼图单一值

c - 我在这里做错了什么(尝试用 C 编写 *.srt 解析器)?