Apple Compressor で、アクティブタブのリストにバッチが残って消せないときの対処方法
DAW
Apple Compressor で Final Cut Pro から送信したバッチがアクティブのリストに乗るものの、進まずに削除もできなくなったので、それを消す方法を探してみました。
Apple のメディアコンバーターソフト https://www.apple.com/jp/final-cut-pro/compressor/ を使って、Apple の動画編集ソフト Final Cut Pro で作成した動画を mp4 形式に変換しようとしたときに、そのバッチ(タスク)がアクティブにはなるものの進まず、削除しようとしても消せないことがありました。
それは普通に停止操作を行なっても反応なく残り続けて、Compressor を再起動しても消せず、macOS を再起動しても残り続けていて、正当な方法では削除できなさそうでした。
新しいバッチを送ればそれはちゃんと処理されるので気にしなければ問題ないのでしょうけれど、無意味なバッチが残り続けているのも気になるので、その削除方法を探してみました。
バッチの履歴を削除する
バッチに関する情報は ~/Library/Application Support/Compressor/History/
に保存されている様子です。このフォルダーを削除することで、Compressor のバッチリストを全て消すことができました。
注意点として、この方法で消えるのは アクティブ
なバッチだけでなく、すでに 完了
したバッチもリストから削除されるため、それを残しておきたい場合は削除するファイルを精査する必要が出てきます。
アクティブなものだけを削除したいとき
各バッチに関連する情報は、先ほどの ~/Library/Application Support/Compressor/History/
の中にある V4
フォルダーに .compressorJobBatch
という拡張子のファイルとして記録されています。
このファイルは XML 形式(テキストベースのプロパティーリスト形式)なので、テキストエディターなどを使って内容を簡単に確認できます。
この中から
plist
array
dict
のなかの key
が ElementStatusState
のものを見つけて、その直後に登場する integer
の値が 1
のものを削除することで、アクティブなままスタートしてくれないバッチを消すことができる様子でした。
完了したものだけを残す方法
この .compressorJobBatch
ファイルはその進行度合いによって内容がけっこう違うことがあるようで、もし今回の自分の不調と異なる感じでアクティブのままバッチが進まない場合、もしかすると先ほど紹介した ElementStatusState
の値が 1
ではないかもしれません。
そのようなときは、
plist
array
dict
のなかの key
が ElementStatusPercentComplete
のところを見つけて、その直後に登場する real
の値が 100
のものを探してそれを残し、それ以外のものを削除することで、バッチが完了していない他の全てを削除することもできるかもしれません。
コマンドで削除を実行するなら
上記の方法でひとつひとつファイルを確認しながら削除していくのが安心ですけれど、ファイルが多かったりして探すのに手間がかかる場合は、ターミナルアプリから次のコマンドを実行して ElementStatusPercentComplete
が 100
ではないものを自動的に見つけて削除してもらうのも良いかもしれません。
使い方としては、ターミナルで ~/Library/Application Support/Compressor/History/V4/
フォルダーに移動した上で、次のコマンドを 1 行で入力して実行します。
ls *.compressorJobBatch | perl -e 'foreach(<STDIN>) { local $/; chop; open(F,$_); print "$_\0" if(!(<F>=~/<key>ElementStatusPercentComplete<\/key>\s*<real>100<\/real>/m)) }' | xargs -0 rm -v
コマンドが長くてわかりにくいですけれど、大きく分けて見ていくと |
で隔たれた ls
と perl
と xargs
の 3 つのコマンドで構成されたコマンドになっているのがわかります。
最初の ls
コマンドでは、現在のディレクトリーにある *.compressorJobBatch
のリストアップが行われています。
その次の perl
コマンドでは、先に実行したコマンドから渡されてきたファイルのリストから ElementStatusPercentComplete
が 100
ではないものを探し、見つかったらそのファイル名を出力しています。ファイル名は \0
で区切って出力しています。
最後の xargs
コマンドでは、前のコマンドを実行することで得られたファイルのリストを受け取って、それを rm
コマンドで削除しています。ファイルのリストは \0
区切りになっているので -0
オプションを指定しています。