/*
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;
}
Replies to Untitled
Title |
Name |
Language |
UNIX |
When |
Re: Untitled |
Anorexic Porcupine |
javascript |
1608791226 |
3 Years ago. |
{"html5":"htmlmixed","css":"css","javascript":"javascript","php":"php","python":"python","ruby":"ruby","lua":"text\/x-lua","bash":"text\/x-sh","go":"go","c":"text\/x-csrc","cpp":"text\/x-c++src","diff":"diff","latex":"stex","sql":"sql","xml":"xml","apl":"apl","asterisk":"asterisk","c_loadrunner":"text\/x-csrc","c_mac":"text\/x-csrc","coffeescript":"text\/x-coffeescript","csharp":"text\/x-csharp","d":"d","ecmascript":"javascript","erlang":"erlang","groovy":"text\/x-groovy","haskell":"text\/x-haskell","haxe":"text\/x-haxe","html4strict":"htmlmixed","java":"text\/x-java","java5":"text\/x-java","jquery":"javascript","mirc":"mirc","mysql":"sql","ocaml":"text\/x-ocaml","pascal":"text\/x-pascal","perl":"perl","perl6":"perl","plsql":"sql","properties":"text\/x-properties","q":"text\/x-q","scala":"scala","scheme":"text\/x-scheme","tcl":"text\/x-tcl","vb":"text\/x-vb","verilog":"text\/x-verilog","yaml":"text\/x-yaml","z80":"text\/x-z80"}