妄想日記 by 妄想エンジン


ts ファイルを mp4 にバッチで変換する。

PT2 二本刺しで、テレビをがんがん録画しているのだが、例によって例のごとく、あまり見る暇がなくて、そのまま HDD の肥やしになっている。
あたりまえだが、HDD 資源は有限なので、そのうちあふれます。いくら zfs ででかい NAS 作ったとしても1時間当たり5GBものサイズではきついです。

ということで、生ts ファイルを適当に再圧縮して保存することにします。Windows 環境であればいろいろやり方があるのですが、今の時期、そのためだけに
windows 環境を常時起動させておくわけにはいきませんし、できれば自動的に変換かけてくれるとらくちんです。ということで、いろいろ調べて下記の
スクリプトに落ち着きました。
とりあえず、mp4box と ffmpeg を使えるようにしてください。あと、x264も使います。

#!/bin/sh
PATH=/bin:/usr/bin:/usr/local/bin

if [ ! -e $1.mp4 ] ; then
touch $1.mp4
TEMPFILE=`mktemp encXXXXXXXX` || exit 1
ln -s $1 ${TEMPFILE}.ts

ffmpeg -i ${TEMPFILE}.ts -acodec copy ${TEMPFILE}.aac
ffmpeg -i ${TEMPFILE}.ts -threads 4 -deinterlace -s hd720 -aspect 16:9 -r 29.97 -vcodec libx264 -g 300 -b 1600000 -f h264 ${TEMPFILE}.264
mp4box -fps 29.97 -add ${TEMPFILE}.264 ${TEMPFILE}.mp4
mp4box -add ${TEMPFILE}.aac ${TEMPFILE}.mp4
mv -v ${TEMPFILE}.mp4 $1.mp4
rm ${TEMPFILE}.ts ${TEMPFILE}.wav ${TEMPFILE}.aac ${TEMPFILE}.264 ${TEMPFILE}
else
echo "skpping $1"
fi

で、うちの環境では録画ファイルに日付が入るようにしていますので、 cron で毎晩23時に前日の録画を自動的にエンコードするようにしています。

追記:2011-11-26

いろいろ試行錯誤して、現在はこんな形に。


#!/bin/sh
PATH=/bin:/usr/bin:/usr/local/bin:$HOME/bin
if [ -e /tmp/stop_enc ] ;then
exit
fi

if [ ! -e "$1.m4v" ] ; then
touch "$1.m4v"
TEMPFILE=`mktemp encXXXXXXXX` || exit 1
ln -s "$1" ${TEMPFILE}.ts

ffmpeg -i ${TEMPFILE}.ts -acodec copy -absf aac_adtstoasc -threads 0 -deinterlace -s hd720 -aspect 16:9 -r 29.97 -vcodec libx264 -g 300 -b 1600000 -f mp4 ${TEMPFILE}.m4v

mv -v ${TEMPFILE}.m4v "$1.m4v"
rm ${TEMPFILE}*
else
echo "skpping $1"
fi

/tmp/stop_enc というダミーファイルを作っておくと、エンコードをやめます。
深夜にバッチで、

ls ~/TVrec/`/bin/date -v-1d +%Y-%m-%d`*.ts | sed 's/^/ts2mp4.sh "/g' | sed 's/$/"/g' | sh

みたいなことをやって流しているので、朝まで終わらなかったら適当なところできるためにこんな仕掛けを入れています。
ときどきうまく変換できなかったり、MXみたいに複数ストリームが含まれている場合は、事前に TsSplitter.exe を -SEP オプションつけて wine 上で動かして分割してから処理しています。

あとはサーバにPT2突っ込んで録画も FreeBSD 鯖で行えるようにしたいけど、いつになることやら。

ツイート
|top |アフィリエイト |windowsネタ |料理メモ |コンタクト |twitter |
さわやかなエロスを目指す--妄想エンジン ©1996-2022
コンテンツ配信