モバイル端末用の動画をまとめて生成するためのコードを書く

動画ファイルはcmp.shと同じ方法で取得し、エンコードはffmpegで行う。

ファイル名: video2mp4.sh
#!/bin/sh

echo "Usage : sh $0 (option)[(0|1):force]"

DIR0="/Video" # 変換元のファイルがあるディレクトリ
DIR1="/for Mobile" # 変換後のファイルを入れるディレクトリ
FORCE=0

if [ $1 = 1 ]; then
 FORCE=1
fi

if [ ! -d "$DIR1" ]; then
 mkdir -p "$DIR1"
fi

main() {
 IFS_BACKUP=$IFS
 IFS=$'\n'
 cd "$DIR0"
 FILES=`find \( -name *.avi -o -name *.flv -o -name *.m2p -o -name *.mpg -o -name *.VOB \)`
 cd "$DIR1"
 for FILE in ${FILES}; do
  if [ -f "$DIR0/$FILE" ]; then
   MP4="$DIR1/${FILE%.*}.mp4"
   if [ $FORCE -eq 1 -o ! -e "$MP4" ]; then
    DIR=`dirname "$MP4"`
    if [ ! -d "$DIR" ]; then
     mkdir -p "$DIR"
    fi
    echo "Encoding '$DIR0/$FILE' to '$MP4'"
    ffmpeg -y -i "$DIR0/$FILE" -acodec libfaac -ab 64k -ar 48000 -vcodec mpeg4 -b 768k -s 480x270 -aspect 16:9 -r 29.97 "$MP4" 1>/dev/null 2>/dev/null
   fi
  fi
 done
 IFS=$IFS_BACKUP
 return 0
}

main $@ || exit $?
使い方は
sh ./video2mp4.sh

フォーマットやサイズ、ビットレートを変えるときは、ffmpegの行のパラメータを変更する。
MPEG4の動画に変換するからファイル名をvideo2mp4.shにしたけど、フォーマットを変えたらこのファイル名はおかしい…w
2013/03/11 23:24
タグ