ffmpeg一括エンコードのバッチ作成

ffmpeg
がさっとエンコードしてしまいたい。

find . -name '*.m4a' -type f > filelist.log

一旦ファイルリストを作成。


そして

#!/bin/sh

while read -r FILE
do
    OUTPUT=`echo $FILE | perl -pe 's/m4a$/mp3/'`

    ffmpeg -y -i "$FILE" -ab 160 "$OUTPUT" 

done < filelist.log

これでいけるかと思いきや、先頭のファイルしか変換されない。
やたらdebug=512って感じの出力がされ、終わる。
おかしい。ファイル名がマルチバイト文字列だしスペースあるし、そういうのが原因なのか。。。


サクっと終わるかと思ってたら、結局これで半日潰れました。
なんでうまくいかないのかはわかりません。


もう手でやったらいいやんっていう。


なんか他の言語でシステム関数たたいてなんとかしてしまおうと。
phpでやろうかと思いましたが、open_basedirとか、もうって思って、

#!/usr/bin/php -d 'open_basedir=/Users'

かなと思いましたが、
勉強もかねて、pythonでやってみました。
カッコとか行末のセミコロンとか書かなくてもインデントでスコープが決まるのはやっぱり楽ちんですね。

#!/usr/bin/env python
import re
import commands

for file in open('filelist.log','r'):
    output = re.sub(r'\.m4a$','.mp3',file)
    c = 'ffmpeg -y -i "'+ file.strip()+'" -ab 160 ' +' "' + output.strip() + '"'
    result = commands.getoutput(c)
    print result 


これでうまくいきました。
もうさっきまでの時間はなんだったんだろうかと。