

Windows 7のデスクトップで、Handbrakeを用いて多数のビデオファイルのエンコーディングを行おうとしています。  
GUI版ではキューを利用したバッチ処理が可能ですが、プロファイルを利用しても多数のビデオを同じ設定でエンコードするには非常に手間がかかります。(具体的には、音声トラック指定やチャプターが引き継がれない上、ハングするとキューがリセットされてしまうため、再度設定しなおしになります)  
そこで、HandbrakeのCUI版を用いて、こちらでバッチ処理で一括エンコードをさせようと考えています。

しかし、CUI版にはキューが実装されていないため、エンコードが終わり次第、手動でエンコードを開始する必要があります。  
バッチでまとめて処理することも考えましたが、以下の問題があります。

・該当ファイルが数百あるため、バッチファイル内に処理対象を記入したり、ドラッグアンドドロップで対処しようとすると、抜け漏れが発生したことに気づかない恐れがある。  
・フォルダ内の一部のファイルのみがエンコード対象であるため、forを用いたフォルダ直下全てに対する処理ができない。(該当ファイルだけを一時的に作業用フォルダに移すことは環境上難しいです)  
・バッチから起動した場合、処理している途中でハングしてしまうと、どのファイルまで処理されたかがすぐには分からなくなってしまう。

そこで、ジョブ・キューによる実行を行いたいと考えました。  
想定する流れは以下の通りです。

・エンコードするコマンドをバッチ1として記述する。(済)  
・バッチ1に引数としてファイル名を与えたものをジョブとしてキューに登録するバッチ2を作る。  
・バッチ2にファイルをドラッグアンドドロップし、バッチ1+ファイル名をキューに追加する。  
・キューが空になるまでエンコードを行う。同時に実行されるHandbrakeは1つとし、1つのファイルのエンコードが終わったら次のファイルのエンコードを開始する。  
・キュー内のジョブは後から確認・追加・キャンセルを行える。

ただ、肝心のキューを実現する方法が分からず、どう実装すれば解決できるのか、途方に暮れています。  
Windows上で完結し、かつできるだけ簡便に、ジョブ・キュー機能を使ってエンコードするには、どのようにすればよいでしょうか。


CC BY-SA 3.0
2015-05-20T09:16:29.577
10417
2015-07-31T09:16:08.253
9814
question
batch-file
Windowsでバッチを実行するため、ジョブ機能(キュー)を利用したい


Windows上で完結するという点で言えば、Windows自体に機能として備わっているマイクロソフトメッセージキュー(MSMQ)を使用されてはいかがでしょうか。Windows7であれば標準で搭載されている機能です。ただし、通常有効化はされていませんので、「コントロールパネル」－「プログラム」－「Windowsの機能の有効化または無効化」のメニューからメッセージキューサーバを有効化する必要があります。

COMベース、および.NETベースのインターフェース経由でキューに情報を載せる＆取り出す必要があるため、それなりのプログラミングが必要となりますので、簡便に、という点では条件に合わないかもしれません。


CC BY-SA 3.0
2015-05-20T12:14:40.067
10426
2015-05-20T12:14:40.067
9515
10417
answer


テキストファイルもバッチファイルで簡易キューとして使えますよ。  
編集も容易ですし。

ファイル名をテキストファイルに追加  
ex)バッチ2.bat [ファイル名]

[code]

    echo %1>>q.txt
    
[/code]

テキストファイルからファイル名を1行ずつ取得してサブルーチンに渡す  
ex)run.bat

[code]

    for /F "usebackq tokens=* delims=," %%i in (`type q.txt`) do call :SUB "%%~i"
    exit /b
    
    :SUB
    set FILE_NAME=%~1
    echo %FILE_NAME%> 処理中.log
    
    rem 処理
    call バッチ1.bat %FILE_NAME%
    if errorlevel 1 EXIT /b 1
    
    echo %FILE_NAME%>>処理終了.log
    echo type null > 処理中.log
    goto :EOF
    
[/code]

後はfc辺りで差分取れば未実行ファイル一覧が取れる

[code]

    fc /C /L q.txt 処理終了.log
    
[/code]


CC BY-SA 3.0
2015-07-31T09:16:08.253
12882
2015-07-31T09:16:08.253
9262
10417
answer