2本まで同時にエンコード

録画したファイルをAviSynthとx264を使って自動的に処理しているんだけど、うちの環境だとCPU使用率は75〜80%くらいにしかならない。

1週間の使用率がこんなかんじ。土日は録画する番組が多いのでどんどん処理が遅延していくんだけど、CPUの使用率を上げられればもっとマシになるはず...。


そこで、1本を2スレッドで処理するんじゃなくて2本同時にエンコードさせようと思ったんだけど、phpのマニュアルに載っているMutexやSemaphoreはWindowsでは使えないらしい...。今回の場合、MutexやSemaphoreじゃなくても「エンコードのプロセスが2つあれば後回し」という処理が実現できればすむ話なんだけど、なんだかめんどくさくなって今まで放置してた。


さっきなんとなく調べてみたら、WSHでプロセスの一覧を取得するのは簡単っぽいので、「2つ実行中なら後回し」は簡単そうな雰囲気だった。

each(GetObject('winmgmts:').InstancesOf('Win32_Process'), function() {
  WScript.Echo(this.CommandLine);
});

function each(c, f) {
  for (var j=new Enumerator(c); !j.atEnd(); j.moveNext()) {
    f.apply(j.item());
  }
}

こんな感じですべてのプロセスのコマンドラインを表示したり。


...今日はだるいのでまた今度やる。