/* NicoJKログのTOKYO MXとBS11を結合するJScriptです。 TSファイルの作成日時に近いjk9とjk211のログを結合し、ダミーチャンネルのログとして出力します。 拡張子をJSにし、WSHとして実行して下さい。 実行方法 cscript 本スクリプトのパス tsパス nicoJKログ(末尾に\はつけない) ダミーチャンネル(省略時999) 探索範囲[秒](省略時180) 実行例 cscript D:\merge_jk9_jk211.js "D:\Videos\ご注文はうさぎですか?BLOOM #11「にっこりカフェと七色の魔法使い」.ts" "D:\NicoJK" 前後180秒以内の該当するログをマージし、999チャンネルに出力する。 NicoConvAssとの併用例 NicoConvAssのch_sid.txtを以下のように書き換える。 211 4 211 * BS11 ↓ 999 4 211 * BS11 BS11のTSファイルはjk999を参照するようになる。 注意点 ・TSファイルのチャンネルは考慮してません。  TOKYO MX・BS11以外のTSファイルが与えられた場合でも、近い時間帯のログをマージします。 ・TSファイルの作成日時と録画開始日時が大きくずれていると、ログもずれます。 ・エラーは考慮してません。 ・生成したログをNicoConvAss以外で使った場合にどうなるかは不明です。 ・TS作成日時とjkログ日時は割とずれます。  必要に応じて探索範囲を広げて下さい。 */ var fso = new ActiveXObject("Scripting.FileSystemObject"); // TSファイルのパス var tsFile = WScript.Arguments(0); // NicoJKログのパス(\で終わらない) var nicoJKLog = WScript.Arguments(1); // 出力チャンネル(既定値999) var outputCH = WScript.Arguments.length >= 3 ? WScript.Arguments(2) : 999; // 探索範囲[秒](既定値180) var maxDiff = WScript.Arguments.length >= 4 ? WScript.Arguments(3) : 180; var outputFolder = nicoJKLog + "\\jk" + outputCH; // TSファイルのUNIXTIME var unixtime = Math.floor(fso.GetFile(tsFile).DateCreated / 1000); // txtをマージ var output = readNearFile(unixtime, nicoJKLog + "\\jk9") + readNearFile(unixtime, nicoJKLog + "\\jk211"); // 出力フォルダがなければ作る(1階層のみ) if (!fso.FolderExists(outputFolder)) fso.CreateFolder(outputFolder); // txtを出力 if (output.length) writeFile(outputFolder + "\\" + unixtime + ".txt", output, 'UTF-8'); function readNearFile(unixtime, path) { var txt = getNearFile(unixtime, path); return txt ? readFile(txt, 'UTF-8') : ''; } // テキストファイルを読み込む function readFile(path, charset) { var sr = new ActiveXObject("ADODB.Stream"); sr.Charset = charset; sr.Open(); sr.LoadFromFile(path); return sr.ReadText(); } // テキストファイルを保存 function writeFile(path, context, charset) { var sr = new ActiveXObject("ADODB.Stream"); sr.Charset = charset; sr.Open(); sr.WriteText(context); sr.SaveToFile(path, 2); } // UNIXタイムスタンプに近い日時のJKログファイル名を取得 function getNearFile(unixtime, folder) { var fso = new ActiveXObject("Scripting.FileSystemObject"); var result = []; var diff = []; var fileunix; var fc = fso.getFolder(folder).Files; var e = new Enumerator(fc); for (; !e.atEnd(); e.moveNext()) { var file = e.item(); fileunix = file.Name.slice( 0, -4); // ファイル名が数値か確認(割とザルなので、正規表現に書き換えたい) if (!isNaN(fileunix)) { result.push(file.Path); diff.push(Math.abs(fileunix - unixtime)); } } var max = diff.length; var min = maxDiff; var found = -1; for (var i = 0; i < max; i++) { if (diff[i] < min) { min = diff[i]; found = i; } } return found !== -1 ? result[found] : false; }