MacのAutomatorでffmpegをごにょごにょしてみるテスト

どんなご家庭でも,録画機で録画したTSファイルを,余っているMac側にエンコード任せられたらいいのに,という需要があると思うので,試してみました.Mac内の動画にも使えますし,応用すればフォルダ監視による完全自動なども可能なのでいろいろと試してみて下さい.

・・・・・・ちなみに,本来の目的を果たすためには問題を抱えています.(後述)

必要なもの

エンコ環境構築

  1. 適当なフォルダ作ってffmpegとmp4box置いておく
  2. ターミナルを起動して,~/ffmpeg/ffmpeg –y –i “~/foo.ts” –s 720x480 –vframes 1500 –f mp4 –vcodec libx264 –crf 24 –strict experimental –acodec aac –ab 128k –level 30 “~/bar.mp4”ぐらいな感じでテストしてみる
  3. 同様にMP4Boxもやるべきだけどスルー

Automator

アプリで新規作成.こんな感じの流れにします.
最初の『指定されたうんぬん』の部分はテスト用なので,App化時には潰します.

スクリーンショット 2012-06-07 21.34.12

自分はSamba越しに引っ張ってくるのでMac側に掘ったローカルフォルダに溜めておく事にしてますけど,Mac内で完結する人はシェルスクリプトの実行だけでも結構です.

シェルスクリプトの実行で,入力の引き渡しを引数に変更.

IFS=$‘\n’

for f in “$@”
do
output_path=“/Users/hageatama/Movies”
program_path=“/Users/hageatama/ffmpeg
filename_full=“${f##/}”
filename_only=“${filename_full%.
}”

“”$program_path"/ffmpeg" -y -i “$f” -s 720x480 -r 30000/1001 -f mp4 -threads 0 -vcodec libx264  -deinterlace -bf 16 -b_strategy 1 -bidir_refine 1 -crf 24 -g 320 -mbd 2 -me_method umh -subq 6 -qdiff 6 -me_range 24 -sc_threshold 70 -keyint_min 3 -nr 100 -qmin 12 -sn -flags2 mbtree+fastpskip -partitions parti4x4+partp8x8+partb8x8 -level 30 -strict experimental -acodec aac -ac 2 -ar 48000 -async 100 -ab 128k -coder 0 “”$output_path"/temp.mp4"
“”$program_path"/MP4Box" -ipod -par 1=32:27 -add “”$output_path"/temp.mp4" -new “”$output_path"/[mobile]“$filename_only”.mp4"
rm “”$output_path"/temp.mp4"
done

自分用モバイル向けエンコ分になってます.
わかる人にはわかるように書いてるので,各自の環境に合わせて書き換えて下さい.
特にMP4Boxの書き出し名の部分は各環境に合わせましょう.

あとはエンコしたいファイルをD&Dでエンコが始まります.

備考

  • ffmpegのテスト時には-vframes 1000くらいで最初だけエンコードすると時間が省けます
  • フォルダアクションで,フォルダに入れた分を自動でエンコなんてのもよいでしょう
  • Upload to FTPとか使ってエンコ後に自宅サーバーへアップロードしたりするとさらに幸せになれます

問題点

技術的にはこれでクリアしているはずなんですが,Automatorはファイルをドラッグすると一定条件でそのファイルを見失うようです(おそらくsmb上のファイルってのが問題)

さらに一度処理に失敗するとどっかのプロセスがロックするらしく,OS再起動するまでファイルのドラッグを無視するようになってくれます..appを直接殺せばわりと復活しますが,復活しないときもあります.

誰か解決策教えて・・・・・・.