Facebook
From Sloppy Kitten, 3 Years ago, written in JavaScript.
Embed
Download Paste or View Raw
Hits: 233
  1. /*
  2. NicoJKログのTOKYO MXとBS11を結合するJScriptです。
  3. TSファイルの作成日時に近いjk9とjk211のログを結合し、ダミーチャンネルのログとして出力します。
  4. 拡張子をJSにし、WSHとして実行して下さい。
  5.  
  6. 実行方法
  7. cscript 本スクリプトのパス tsパス nicoJKログ(末尾に\はつけない) ダミーチャンネル(省略時999) 探索範囲[秒](省略時180)
  8.  
  9. 実行例
  10. cscript D:\merge_jk9_jk211.js "D:\Videos\ご注文はうさぎですか?BLOOM #11「にっこりカフェと七色の魔法使い」.ts" "D:\NicoJK"
  11. 前後180秒以内の該当するログをマージし、999チャンネルに出力する。
  12.  
  13. NicoConvAssとの併用例
  14. NicoConvAssのch_sid.txtを以下のように書き換える。
  15. 211     4       211     *       BS11
  16. 999     4       211     *       BS11
  17. BS11のTSファイルはjk999を参照するようになる。
  18.  
  19. 注意点
  20. ・TSファイルのチャンネルは考慮してません。
  21.  TOKYO MX・BS11以外のTSファイルが与えられた場合でも、近い時間帯のログをマージします。
  22. ・TSファイルの作成日時と録画開始日時が大きくずれていると、ログもずれます。
  23. ・エラーは考慮してません。
  24. ・生成したログをNicoConvAss以外で使った場合にどうなるかは不明です。
  25. ・TS作成日時とjkログ日時は割とずれます。
  26.  必要に応じて探索範囲を広げて下さい。
  27. */
  28.  
  29. var fso = new ActiveXObject("Scripting.FileSystemObject");
  30.  
  31. // TSファイルのパス
  32. var tsFile = WScript.Arguments(0);
  33. // NicoJKログのパス(\で終わらない)
  34. var nicoJKLog = WScript.Arguments(1);
  35. // 出力チャンネル(既定値999)
  36. var outputCH = WScript.Arguments.length >= 3 ? WScript.Arguments(2) : 999;
  37. // 探索範囲[秒](既定値180)
  38. var maxDiff = WScript.Arguments.length >= 4 ? WScript.Arguments(3) : 180;
  39.  
  40. var outputFolder = nicoJKLog + "\\jk" + outputCH;
  41.  
  42. // TSファイルのUNIXTIME
  43. var unixtime = Math.floor(fso.GetFile(tsFile).DateCreated / 1000);
  44.  
  45. // txtをマージ
  46. var output = readNearFile(unixtime, nicoJKLog + "\\jk9") + readNearFile(unixtime, nicoJKLog + "\\jk211");
  47.  
  48. // 出力フォルダがなければ作る(1階層のみ)
  49. if (!fso.FolderExists(outputFolder)) fso.CreateFolder(outputFolder);
  50. // txtを出力
  51. if (output.length) writeFile(outputFolder + "\\" + unixtime + ".txt", output, 'UTF-8');
  52.  
  53. function readNearFile(unixtime, path) {
  54.         var txt = getNearFile(unixtime, path);
  55.         return txt ? readFile(txt, 'UTF-8') :  '';
  56. }
  57.  
  58. // テキストファイルを読み込む
  59. function readFile(path, charset) {
  60.         var sr = new ActiveXObject("ADODB.Stream");
  61.         sr.Charset = charset;
  62.         sr.Open();
  63.         sr.LoadFromFile(path);
  64.         return sr.ReadText();
  65. }
  66.  
  67. // テキストファイルを保存
  68. function writeFile(path, context, charset) {
  69.         var sr = new ActiveXObject("ADODB.Stream");
  70.         sr.Charset = charset;
  71.         sr.Open();
  72.         sr.WriteText(context);
  73.         sr.SaveToFile(path, 2);
  74. }
  75.  
  76. // UNIXタイムスタンプに近い日時のJKログファイル名を取得
  77. function getNearFile(unixtime, folder) {
  78.         var fso = new ActiveXObject("Scripting.FileSystemObject");
  79.         var result = [];
  80.         var diff = [];
  81.         var fileunix;
  82.  
  83.         var fc = fso.getFolder(folder).Files;
  84.         var e = new Enumerator(fc);
  85.         for (; !e.atEnd(); e.moveNext()) {
  86.                 var file = e.item();
  87.                 fileunix = file.Name.slice( 0, -4);
  88.                 // ファイル名が数値か確認(割とザルなので、正規表現に書き換えたい)
  89.                 if (!isNaN(fileunix)) {
  90.                         result.push(file.Path);
  91.                         diff.push(Math.abs(fileunix - unixtime));
  92.                 }
  93.         }
  94.  
  95.         var max = diff.length;
  96.         var min = maxDiff;
  97.         var found = -1;
  98.         for (var i = 0; i < max; i++) {
  99.                 if (diff[i] < min) {
  100.                         min = diff[i];
  101.                         found = i;
  102.                 }
  103.         }
  104.         return found !== -1 ? result[found] : false;
  105. }

Replies to Untitled rss

Title Name Language When
Re: Untitled Anorexic Porcupine javascript 3 Years ago.