ffmpegを携帯動画変換君経由でbatファイルで動かしています。
エンコード途中で画面が処理落ちというか、
エクスプローラー内のフォルダやファイルが表示されなくなったり、
フォルダのアイコンが違うアイコンに変わったりします。
所謂処理落ちみたいな感じなんですが、完全にフリーズにはなりません。
マウスは普通に動くし、エンコードも普通に進んでます。
ですが、この状態になると基本的にシャットダウンするまでは何もできない状況です。
漠然としていてわかりづらいですが、原因は何が考えられるでしょうか?
当方のスペックは
Win7 64bit
i7 860
メモリ8G
です。
なんでもいいのでご回答いただきたく思います。
画像は友人(スペックはほぼ同じ)が再現してくれたものをスカイプで撮影したものです。
タスクとブラウザの一部には個人情報に該当しそうだったので黒塗りにしています。
左側半分を見ればわかりますが、エクスプローラーが透けて、dosウィンドウも表示がおかしいです。
bat経由なので大量のファイルを一括で処理してるんだと思うんですが
処理の終了を待たずに次のエンコード始めちゃってるってことはないですかね?
とりあえず
1ファイルのみで試す
イベントビュアー・タスクマネージャーのあたりを確認する
ffmpegを他のバージョンに差し替えてみる
ffmpegの代わりにHandBrakeCLIなどを使用してみる
などをやってみはどうでしょう
ffmpegがCPUを占有してしまっている為に他のウィンドウに処理が回っていないと思います。おそらく変換処理が終われば通常に戻るのですよね?
ffmpegに自律的にCPU占有率を制御するオプションがあればよいのですが、どうも無さそうなので、外部から調整する必要があります。
Process Lossoのようなツールで、ffmpegのプロセス優先度を下げてみるとよいかもしれません。
※タスクマネージャでもffmpeg.exeのプロセスを選んで右クリックし、「優先度の設定」で行うことが出来ますがこれは起動中のプロセスのみ有効です。次にffmpeg.exeを起動すると元に戻ります。Process Lossoは指定したプログラムについてこの操作(優先度の変更)を毎回自動でやってくれます。
(参考)基本優先度を変更する
なおプロセス優先度を下げると、エンコード処理は若干遅くなりますが、それはエクスプローラーなど別のアプリケーションの画面表示など本来の処理にCPU時間が回された分ですので、仕方のないところです。
ちなみにマウスの動作は、プロセスの優先度の話とは別に、割り込み処理としてOSが優先して処理しますので、特定のアプリがCPUを占有してもそれほど影響は受けません。
回答ありがとうございます。
処理の終了を~
は思い当たる点もあるのでbatの書き方を変えてみようかと思います。
bat内ではいろいろな処理をしています。
長くなるのでコピペできないのですが、簡単に書くと
環境変数のSET→FFで音声をwav→映像抜き出し→wavと映像合成→
☆映像を指定時間エンコード→音声抜き出し→音声をNEROでエンコ→映像と音声の合成→
QT3GPPFlattenで情報付加→☆に戻り1ファイル消化するまで繰り返す→
消化したら全ての出力ファイルをMP4BOXでMMP4に変更
が大体の流れとなります。
FFMPEGはバージョンによって挙動が違うのと、amrなどの古いバージョンでしか使えないコーデックがあるので3種類使い分けています。
HandBrakeCLIについては調べてみます。