automatorでHandBrakeCLI

macのautomatorを使用して、iphotoライブラリ内の動画の一括圧縮をしようとしています。
Finder項目を取得したのち、以下のShellScriptを実行しているのですが、
2ファイルまでしか連続で処理できません。何故でしょう


for f in "$@"
do
/Applications/HandBrakeCLI -i "$f" -o "cache.AVI" --preset="iPhone 4";
cdate=`/usr/bin/GetFileInfo -d $f`
mdate=`/usr/bin/GetFileInfo -m $f`
mv cache.AVI $f
/usr/bin/SetFile -d "$cdate" -m "$mdate" $f
echo "$f" >> done.txt
done


1ファイル・2ファイルのときは問題なくワークフローが終了しますが、
3ファイル以上を選択して実行すると、2ファイル分のログがdone.txtに書き出された後、
ステータスバーが「実行中-シェルスクリプトを実行」
のまま、いつまでもワークフローが終了しません。
どなたか原因のわかる方、ご教授願います。

MacBook Air, Mac OS X (10.6.6)

投稿日 2011/03/18 00:14

返信
返信: 4

2011/03/18 05:29 mossang への返信

こんにちは。


HandBrakeCLIを使ってますか、マニアックですね。(笑


ちなみに私は0.9.5を自前コンパイルして使ってます。


ファイル名は拡張子も換えないのですよね? 元もMP4で、単にiPhone4用に最適化し直すだけ、ということだと仮定して。


私のところでは動いてますが。ただし、m4vファイルをiPhone用に最適化する、というScriptで動かしてみました。 Automatorからではなく、実行権つけてTerminalから動かしました。


for f in *.m4v

do

/Applications/HandBrake-0.9.5/build/HandBrakeCLI -i "$f" -o "cache.AVI" --preset="iPhone 4";

cdate=`/usr/bin/GetFileInfo -d $f`

mdate=`/usr/bin/GetFileInfo -m $f`

mv cache.AVI $f

/usr/bin/SetFile -d "$cdate" -m "$mdate" $f

echo "$f" >> done.txt

done


TESTでは4つのファイルがちゃんと変換できましたよ。


PS:気がついたんですが。

Automator側からの"$@"の受け渡しはFile単位独立では? なので、forでループさせなくていいと思いますが。。。。

シェルから直接一発実行のためにループさせているわけですからね。


まぁ、一応ご報告です。

2011/03/18 10:18 亀どん への返信

早速の返信ありがとうございます。

たしかに!automatorを使ってつくりはじめたので無駄に縛られてました!


すいません、目的を書き忘れてましたね(^^;

目的はiPhotoライブラリのスリム化で、

iPhotoライブラリのOriginalsフォルダに直接アクセスして、

IXYでとった動画(AVI)をh.264で圧縮しようとしてました。

mac上では拡張子むちゃくちゃでもとりあえず再生してくれるので、

そこは妥協してm4vファイルに元ファイルと同名にするべく.AVI拡張子をつけていた次第です。

iPhone 4 presetは、たまたま圧縮率が適当だったので使ってました。


サブフォルダ一括で圧縮してしまいたかったので、


listdata=`find /Volumes/DriveA/iPhoto/Originals -name '*.AVI'`

for f in $listdata

do

/Applications/HandBrakeCLI -i "$f" -o "cache.AVI" --preset="iPhone 4"


cdate=`/usr/bin/GetFileInfo -d $f`

mdate=`/usr/bin/GetFileInfo -m $f`

mv cache.AVI $f

/usr/bin/SetFile -d "$cdate" -m "$mdate" $f


echo "$f" >> d.txt

done


という.shを作って実行してみたところ、うまくいきそうです。

最初は


find [フォルダ名] -name '*.AVI' | while read f

do

...


で作ったのですが、何か間違っていたらしくループに入らず1ファイルしか出力されず、

結果上のスクリプトになりました。


RE:PS

複数ファイルを選択してfinder項目を取得すると、automatorは配列で渡してくるみたいです。

forのループが必要っぽかったです。

2011/03/18 15:49 mossang への返信

おはようございます・・


AVIの拡張子のままで中身はm4vにしちゃうのですかぁ。 QuickTimeが認識できれば問題なさそうですが、将来問題が起きないかちょっと気になりますね。


>複数ファイルを選択してfinder項目を取得すると、automatorは配列で渡してくるみたいです。

>forのループが必要っぽかったです。

私、Automator使った事なくて。(笑 シェルスクリプトか、Perlでやっちゃう事がほとんどです。


ちょっと試しにAutomatorで、Finder項目を取得→シェルスクリプト実行 でやってみました。

確かに3個目変換の最後のほうでHandBrakeCLIが終了(異常終了?)したままで永久ループですね。

for文は確かに必要みたいで、これは失礼いたしました。


最近、HandBrakeCLIやffmpegで大量にm4v変換ばっかりやってるので、同じようなことやってるなぁ、とちょっとうれしくなりました。😀


ではでは。

2011/03/18 17:19 亀どん への返信

おはようございます。

おかげさまで、昨夜からiPhotoライブラリ内の529ファイルの変換作業で

CPUとHDDが唸りを上げています。


次はOriginalsフォルダ内のファイルの拡張子を変更しても

iPhotoが問題なく認識するための方法を考えたいと思います(笑


アドバイスありがとうございました。

このスレッドはシステム、またはAppleコミュニティチームによってロックされました。 問題解決の参考になる情報であれば、どの投稿にでも投票いただけます。またコミュニティで他の回答を検索することもできます。

automatorでHandBrakeCLI

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。