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 のなかの keyElementStatusState のものを見つけて、その直後に登場する integer の値が 1 のものを削除することで、アクティブなままスタートしてくれないバッチを消すことができる様子でした。

完了したものだけを残す方法

この .compressorJobBatch ファイルはその進行度合いによって内容がけっこう違うことがあるようで、もし今回の自分の不調と異なる感じでアクティブのままバッチが進まない場合、もしかすると先ほど紹介した ElementStatusState の値が 1 ではないかもしれません。

そのようなときは、 plist array dict のなかの keyElementStatusPercentComplete のところを見つけて、その直後に登場する real の値が 100 のものを探してそれを残し、それ以外のものを削除することで、バッチが完了していない他の全てを削除することもできるかもしれません。

コマンドで削除を実行するなら

上記の方法でひとつひとつファイルを確認しながら削除していくのが安心ですけれど、ファイルが多かったりして探すのに手間がかかる場合は、ターミナルアプリから次のコマンドを実行して ElementStatusPercentComplete100 ではないものを自動的に見つけて削除してもらうのも良いかもしれません。

使い方としては、ターミナルで ~/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

コマンドが長くてわかりにくいですけれど、大きく分けて見ていくと | で隔たれた lsperlxargs の 3 つのコマンドで構成されたコマンドになっているのがわかります。

最初の ls コマンドでは、現在のディレクトリーにある *.compressorJobBatch のリストアップが行われています。 その次の perl コマンドでは、先に実行したコマンドから渡されてきたファイルのリストから ElementStatusPercentComplete100 ではないものを探し、見つかったらそのファイル名を出力しています。ファイル名は \0 で区切って出力しています。

最後の xargs コマンドでは、前のコマンドを実行することで得られたファイルのリストを受け取って、それを rm コマンドで削除しています。ファイルのリストは \0 区切りになっているので -0 オプションを指定しています。