JavaScript
YouTube

新しくなったYoutubeの字幕XMLをSRTファイルに変換するツール

More than 1 year has passed since last update.

Youtubeのある動画の字幕の自動翻訳が気に食わなくて
もう少しマシな翻訳にしたいなと、Chromeのデベロッパーツールで字幕ファイルをダウンロードした。

見たことがない形式だったので、使いやすいSRTファイルに変換しようとしたが現在の字幕ファイルに対応しているツールは見つからなかった。

しかたないので、適当に変換ツールを作ってみました。
こちら
誰かの役に立てたら幸いです。

ソースコード

<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script>
$(function(){
  $("#datafile").on("change", function(){
    var file = $(this).prop('files')[0];
    var fileRdr = new FileReader();

    if(!this.files.length){
      return;
    }

    fileRdr.onload = function() {
      $("#src").text(fileRdr.result);
    }
    fileRdr.readAsText(file);
  });

  $("#execute").on("click", function(){
    var text = "";
    var cnt = 0;
    $($("#src").text()).find("p").each(function(){
      if($(this).text().length > 1 || $(this).text() != "\n"){
        text += (++cnt) + "\n" + tick2time($(this).attr("t")) + " --> " + tick2time($(this).attr("t")*1 + $(this).attr("d")*1) + "\n" + $(this).text() + "\n\n";
      }
    });
    $("#dst").text(text);
  });

  function tick2time(tick){
    var h, m, s, ms;
    ms = tick % 1000;
    tick = Math.floor(tick/1000);
    s = tick % 60;
    m = Math.floor(tick / 60) % 60;
    h = Math.floor(tick / 3600);
    return ( "0" + h ).slice( -2 ) + ":" +
           ( "0" + m ).slice( -2 ) + ":" +
           ( "0" + s ).slice( -2 ) + "," + 
           ( "00" + ms ).slice( -3 );
  }

});
</script>
<title>timedtext.xml to srt Convertor</title>
</head>
<body>
<h1>timedtext.xml to srt Convertor</h1>
<input id="datafile" type="file" accept="text/plain,text/xml"/>
<br>
<b>source</b><br>
<textarea id="src" rows="10" cols="100"></textarea><br>
<br>
<button id="execute">Convert</button><br>
<b>dest</b><br>
<textarea id="dst" rows="40" cols="100"></textarea><br>
</body>
</html>

こんなダサいツールではなく、ちゃんとしたのを誰かが作ってくれることを期待します。(^^;