Comskipを使って録画データのCMを全自動でカットするスクリプト

先日PT3+Chinachuな録画サーバーを構築したお話をしたわけですが、現在はもっぱらアニメを録画させています。ほとんど見てないけど。

30分の番組を録画してファイルサイズは大体3GB弱。非常にかさばります。もちろんエンコすることでコンパクトに出来るんですが、その前に邪魔なCMを消すことでよりスマートにしようというのが今回の目的であります。

CMをカットするスクリプトといえば、ComskipBatch.rbというrubyで書かれたスクリプト。これを使ってコマンドを打てば手動でCMカットの処理をさせることができるのですが、今回はシェルスクリプトとcronの力を使って全自動でカットさせてしまいたいと思います。

また、CMカットが正常に出来たかも簡易的に判定するようにしました。

Comskipとffmpegのインストールは上記の解説ページ通りにやれば大丈夫でした。

ffmpegのインストールに関してもリンクが張られています。ubuntu14.04 にffmpegをインストールする – UbuntuによるEco Linuxサーバ構築記がそのリンク先なのですが、ここに書かれているコードを全部コピーしてシェルスクリプトとして実行すればワンタッチでいけました。すごい。

最後のエンコードテストだけファイルがないといってエラーになったので、ここは手動でやり直しましたけどね。

というわけで、Comskipとffmpegのインストールが終わったら早速シェルスクリプトを書きましょう。

※この記事に掲載しているスクリプトですが、どうやら動画の長さを正しく判定できなかったりしてなんやかんやうまく動かない場合があるようです。
もし利用する場合はご自分で色々調整されることをオススメ致します。

Continue reading

Linuxで対話的にホットスワップするスクリプト作った

私の構築しているサーバーはホットスワップベイが付いているのですが、Linuxでホットスワップするのはコマンド打たないといけなくてちょっと面倒。

というわけで、対話的にホットスワップできるスクリプトを組んでみました。

このスクリプトでアンマウントとecho 1の書き込みをワンタッチで行うことが出来ます。ついでにsyncもさせています。


#!/bin/sh

while true;do
list=`df -h |grep /dev/sd`
echo "HDD一覧を表示します。"
echo "$list\n"

while true;do
echo "HDD名を入力 /dev/sd 例)a"
read name

if [ $name ] ; then
break
fi
done

echo "/dev/sd$nameでよろしいですか? y/n"
read answer

case $answer in
y)
hdd=sd$name
dev=/sys/block/$hdd/device/delete
if [ ! -e $dev ] ; then
echo "/dev/sd$nameが存在しません。"
else
echo "処理を開始します。"
break
fi
;;
n)
echo "最初からやり直します。"
;;
*)
echo "入力ミスです。"
;;
esac
done

echo "sync中..."
sync
sync
sync
sleep 3s

echo "/dev/$hddをumount..."
sudo umount /dev/$hdd*

if [ $(mount |grep $hdd |wc -l) -gt 0 ] ; then
echo "umountに失敗しました。"
exit 1
else
echo "正常にunmountしました。"
echo "/dev/$hddの削除..."
echo "1" > $dev

if [ ! -e $dev ] ; then
echo "/dev/$hddを削除しました。"
else
echo "削除に失敗しました。"
fi
fi

コピーしたらタグとか全部消えてしまった…。

シェルスクリプトもド素人なのでソースがおかしければご指摘お願い致します。

私の環境ではこれで一応問題なくホットスワップできているようです。

もし参考になれば使ってあげて下さい。

 

ただ、ディスクを抜き差しするとステータスが変わった的なメッセージが表示されるのですがこれは正常なんですかね…?