Core i7に100%のCPU負荷

2 of 3123Next»
というわけで以下のようなPowershellスクリプトを書き、複数の動画を同時に変換してみることに。
begin {
  $nProcs = 2
  $PIDs = @()
  $WMI_PROC = [WMICLASS]"root¥cimv2:Win32_Process"
  $pwd = pwd; $pwd = $pwd.Path
}

process {
  # Watch the process
  while($true)
  {
    if( $PIDs.Count -eq 0 ) { break }

    $subsql = @()
    foreach($aPID in $PIDs)
    {
      $subsql += "ProcessID="+$aPID
    }

    # Update PID list
    $sql = "SELECT ProcessID FROM Win32_Process WHERE "+[System.String]::Join(" OR ", $subsql)
    $procs = Get-WmiObject -Query $sql
    $PIDs = @()
    foreach( $aProc in $procs )
    {
      $PIDs += $aProc.ProcessID
    }
    if( $PIDs.Count -lt $nProcs){ break }

    # Number of threads is equal or more than $nProcs.
    [System.Threading.Thread]::Sleep(5000)
  }

  # Launch ffmpeg
  $base = [System.IO.Path]::GetFileNameWithoutExtension($_.Name)
  $ffmpeg = [System.String]::Format(
    "start /b /belownormal /wait ffmpeg -i {0} -f psp -s 480x272 (other options) {1}",
    $_.FullName, [System.IO.Path]::Combine($pwd, "$base.mp4")

  $newProc = $WMI_PROC.Create("cmd.exe /c `"$ffmpeg`"", $pwd)
  $PIDs += ($newProc.ProcessId)
}
'start /b /belownormal /wait'の部分は処理優先度を下げるためのものですので、通常優先度で良いなら省略可能。dirコマンドなどが出力するFileInfoクラスの配列を入力ファイルとしてパイプから受け取る設計になってまして、
dir *.mpg | .¥ffmpeg.ps1
のように使います。こうしておくと、ワイルドカードで指定できない条件でファイルを選択するLink ことができて便利。中身の動作は
  1. 保存しているプロセスIDのプログラムがまだ走っているかを確認、終了した場合はリストから削除。
  2. 保存プロセスIDの数が$nProcsに対して
    • 同じもしくは超えているなら、5秒待って最初に戻る(つまり何もせずに待つ)
    • 小さいなら、次へ
  3. WMIのWin32_Processを使って別プロセスでコマンドプロンプトを起動、プロセスIDを保存。
  4. 最初に戻る。
別プロセスでffmpeg起動するためにWMI使っており、他の部分もPowershell/.NET Frameworkでないといけないわけでもないので、WSH(Windows Script Host)でも実現可能だと思います。

[参考]

2 of 3123Next»

— posted by mu at 01:06 am   commentComment [0]  pingTrackBack [0]

この記事に対する TrackBack URL:

設定によりTB元のページに、こちらの記事への言及(この記事へのリンク)がなければ、TB受付不可となりますのであらかじめご了承下さい。

コメントをどうぞ。 名前(ペンネーム)と画像認証のひらがな4文字は必須で、ウェブサイトURLはオプションです。

ウェブサイト (U):

タグは使えません。http://・・・ は自動的にリンク表示となります

:) :D 8-) ;-) :P :E :o :( (TT) ):T (--) (++!) ?;w) (-o-) (**!) ;v) f(--; :B l_P~ (QQ)

     

[X] [Top ↑]

T: Y: ALL: Online:
ThemeSwitch
  • Basic
Created in 0.0187 sec.
prev
2009.10
next
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31