HandBrake

https://handbrake.fr/

HandBrake は動画ファイルの形式を変換するソフトウェアです。HandBrake を使って動画ファイルをコマンドラインでエンコードするスクリプトを書いてみました。

処理の概要

  • HandBrake のコマンドラインインタフェースHandBrakeCLI を使用します。
  • HandBrake のUniversal というプリセットを使って、M2TS 形式をMP4 に変換します。
  • 変換元ディレクトリにあるファイルを変換して、変換先ディレクトリに格納します。
  • すでに変換したファイルはスキップします。
  • 変換元ディレクトリの中のファイルが最近(10分以内)更新されている場合は処理の開始をスキップします。

HandBrakeCLI のインストール

$ sudo add-apt-repository  ppa:stebbins/handbrake-releases
$ sudo apt-get update
$ sudo apt-get install handbrake-cli

変換スクリプト

m2ts2m4v.sh
#!/bin/bash

SRCDIR=/PATH/TO/SOURCE_DIRECTORY
DSTDIR=/PATH/TO/DESTINATION_DIRECTORY
ENC=HandBrakeCLI
PRESET="Universal"
WAITMIN=10
SRCEXT=m2ts
DSTEXT=m4v

if ! [ -d $SRCDIR ] || ! [ -d $DSTDIR ] ; then
echo "Bad directory."
exit
fi

count=`ps -ef | grep $ENC | grep -v grep | wc -l`
if [ $count != 0 ]; then
echo $ENC "is already running."
exit
fi

cd $SRCDIR

hits=`find . -maxdepth 1 -mmin -$WAITMIN -type f | wc -l`
if [ $hits -gt 0 ] ; then
echo "Source directory is currently used."
exit
fi

for f in *
do

if [ ${f##*.} != $SRCEXT ] ; then
echo "skip ${f} ..."
continue
fi

g=${f/\.$SRCEXT/\.$DSTEXT}
if [ -e $DSTDIR/${g} ] ; then
echo "skip ${f} ..."
continue
fi

echo "Processing ${f} ..."
$ENC -i "$SRCDIR/${f}" -o "$DSTDIR/${g}" --preset=$PRESET

done

スクリプトの実行

$ ./m2ts2m4v.sh

cron に設定すれば定期的に処理を実行してくれます。
毎日4:00 に実行する場合、crontab -e で以下のように設定します。

crontab -e
0 4 * * * /PATH/TO/m2ts2m4v.sh