***** 注 意 *****
作者の方も指摘している通り、まだいろいろ作業中で、重大な変更があるかもしれません。
また、FreeBSD をサーバに使うのは推奨環境ではありません。
くれぐれも作者の方に文句を言わないこと。
足元が濡れていて滑ります。ころんでも泣かない人だけどうぞ。
ということで、入院中もテレビを見るのに大活躍してくれたKonomiTVですが、
最新版の master はいろいろと機能が追加されていて、面白そうだったので最新にアップデートしてみることにしました。
そのうえで、いろいろ試してみて気が付いた点などを書いていきます。
例によって例のごとく、サーバは FreeBSD で qjail で環境を作ります。
FreeBSD は推奨環境ではありませんが、どうにかこうにか動かすことはできます。
また、最新の KonomiTV は https 化必須なので、事前に自ドメインのワイルドカード証明書を取ってあるものとします。
はまりポイントは3つです。
1. lo0 に 127.0.0.77 を割り当てる
2. Letsencrypt で dns 認証で証明書を取っておく。独自ドメインを持っていることが前提。
3. python3 で pip がみつからない問題の解決。
以下に順を追って説明します。example.org は自ドメインに置き換えてください。
テレビの録画に関しては、EPGStation がほぼ完ぺきな動きで、ここ何年か特に問題もなく暮らしてきたのですが、リアルタイムでの視聴は、いまだに TvTest を使っていました。
時々テストで VLC とか使ったり、最近の Mirakurun の IPTV 対応に喜んで、IPTVクライアントをいろいろ試してたりもしてたのですが、なんだかんだで最終的に TvTestに戻ってきてしまって「まあ動くからいいか」という感じだったのですが、
やっぱりだらだらソファーでごろ寝しながらタブレットでみたいよね。ということで、TVRemotePlus は気になっていたのですが、いかんせんWindows でしか動きませんでした。
ところが最近同じ作者の方が、Konomi という Python で動く同じようなソフトを公開し始めたので、さっそく試してみました。
https://github.com/tsukumijima/Konomi
お約束:
例によって例のごとく、FreeBSD 上の qjail 環境に jail を1つ立てて、その中で動かします。
Mirakurun は別の jail で動いています。
とりあえず、QSVエンコードは使える CPU ですが、今回は使いません。
当然のことながら、作者の推奨環境ではありませんので、動かなくても泣きません。
や、v1 環境でなんの問題もなく動いているんだけど、とりあえず新しいのが出たら入れてみたくなるじゃん。
そして勢いがあるうちに入れて試して記事書いておかないと、すぐ忘れちゃうからとっとと記録。
前提
例によって例のごとく、FreeBSD 環境に入れてます。そして Jail でコンテナに入れます。
チューナーは Mirakurun を別コンテナで動かしています。
なんにもなければはまる要素はありません。
ということで、以下簡単な流れ。
ということで、以前から Amatsukaze を使って自動エンコする快適生活を送っていたのだが、そのためには録画サーバと別にエンコマシンが必要で、録画サーバは FreeBSD マシンで、エンコサーバは Windows 8.1 でした。
定期的にメンテナンスはしていたのですが、Windows マシンはときどき勝手に再起動していたり、アップデートで再起動していたりして、エンコがこけていて録画サーバがあふれてしまいそうになったことが何度もありました。
いいかげんどうにかしないといけないなと思っていたのですが、録画サーバでエンコするのは結構負荷的に厳しいと思っていたのであきらめていたのですが、 ffmpeg で vaapi 経由で QSV が使えることが分かったので、重い腰を上げて対応してみました。
なにげにNTT-X のページ見てたら、お手頃な値段だったうえに、d払いだと25%もoff になるということだったので、冷静にぽちっとな。
最近ちょっとはまっている Assetto Corsa でフレーム落ちしなくなるといいなあ&NVEncでh265でエンコードをやりたかったのだ。
今までは GTX750Ti のボードだったのだが、当初はばかっぱやと思っていたエンコードも、なんとなく物足りなくなってきたし、h265は
エンコできなかったので、その点が不満だったのだよね。
さっそく入れ替えて、アナログVGAコネクタが無くて昇天。そこだけどうにかしないと。
ドライバも新しいのを入れて、さくっと設定完了。これであと2年は戦える。
肝心のエンコードは、これから煮詰めていきましょう。
とりあえず、Fire TV Stick で再生できるコーデックにしないといけないので、そのへんしばらくは試行錯誤だな。
そして、押し出されたGTX750Tiのボードは録画サーバに挿して、nvenc が使えるか、いろいろテストするのだ。
これができると録画サーバ単体ですべて賄えるようになるからね。
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 鯖で行えるようにしたいけど、いつになることやら。