PC録画サーバとiPhone/iPadを自動的に同期させる大作戦
2016/03/24
価値ある情報をユーザー視点で発信するブログ
2016/03/24
PT2、TVRock、TVTest、EpgDataCap_Bon、BonTsDemuxなどによる録画サーバ構築は楽しいものです。Windowsで環境を構築すると、休止/スタンバイ状態を挟んで録画/エンコードができるため、省電力ですし、うるさくありません。
不満は、iPhone/iPadとの連携が弱いこと。特に、マカーで、iPhone/iPadをMacのiTunesと同期させている場合は、Windows版のiTunesとの同期方法を考えねばならず、頭が痛いのです。そして、少しでも面倒だと結局録画を見なくなるというのは何度も経験済。
そこで、foltiaのように、エンコード済み動画のVideoCastの作成を試みてみました。
録画、エンコードなどの作業はWindowsマシンで済ませ、Windowsマシン上に立てたWebサーバ経由でVideoCast配信し、それをMacのiTunesで受け取るという作戦です。もちろん、WindowsのiTunesを使ってもOKです。
Windowsマシンでエンコードが終わればMacのiTunesで受け取れ、それをiPhone/iPadに同期できるため、非常に便利です。単純に録画サーバからクライアントマシンに動画をダウンロードしてくる仕組みとしても便利だと思います。(続きは[MORE]から)自分はいまだにWindows XPしか使ったことがないため、Windows側はWindows XP SP3での説明となっています。
自分はWindows XP SP3でPT2とTVRock/TVTestを中心とした録画サーバ環境を構築中ですが、このエントリではその基本設定については解説していません。手を付けたばっかりだというのと、解説を始めると手間が膨大なので。
それを専門にしているサイトを参照してください。
この環境を作るためには、iPhone/iPad向けの自動エンコードができる環境を作る必要がありますが、その要になるBonTsDemuxに同梱のffmpegほか各地で手に入る最近のプリビルドのffmpegは、iPhone/iPad向けのエンコードで重要な音声コーデックAACを司るlibfaacが、ライセンス問題の関係で使えない状態になっているため、少々の調整が必要です。世の中のほとんどのiPhone向けエンコードの説明は、このlibfaacを使うことを前提にしているため、困った人も多いと思います。
今回のエントリには直接関係ありませんが、libfaacを使わずiPhone/iPad向けにエンコードをするための手順を書いておきます。
既に自動エンコの環境ができている人は読み飛ばしてください。
現時点での最新版「BonTsDemux v1.10+10k7+nogui+es+fix05 バグ修正」を入手します。
ここから最新版のffmpegをもらってきて、BonTsDemux同梱のffmpegと差し替えます。
自分の録画サーバのCPUはAMD Phenom IIなので、Phenom II向けの最適化がされたものを選択しました。
最近のffmpegは、プリセットの-vpreを指定する場合、プリセットファイルがあるディレクトリを環境変数に設定しておかないとなりません。BonTsDemuxの中に.ffmpegディレクトリがあり、その中にプリセットファイルが入っているので、BonTsDemuxをインストールしたディレクトリを環境変数FFMPEG_DATADIRに設定します。自分は.ffmpegディレクトリをE:\.ffmpegに移動しており、スクリーンショットはそのような指定になっています。
環境変数は、「マイ コンピュータ>プロパティ>詳細設定>環境変数」で設定できます。
BonTsDemuxの実行ファイルと同ディレクトリにcap_sts_sea.iniというファイルがありますので、その末尾に以下のように追記。
X264_iPhone = -f mp4 -threads 0 -vcodec libx264 -aspect 16:9 -vtag mp4v -crf 24 -flags2 dct8x8 -level 31 -acodec aac -strict experimental -ac 2 -ar 48000 -ab 160k -s 1280×720 -y -coder 1 -deinterlace -top 1 -qmin 10 -vpre libx264-normal -r 30 -vb 9M
X264_iPhone_EXT =mp4
ポイントは、libfaacの代わりにffmpeg内蔵の、まだ実験段階のAACコーデックを使うために「-strict experimental」というオプションを指定する必要があるということ。
ffmpeg内蔵のAACコーデックはlibfaacより完成度が低い可能性があるのでビットレートを160kと高めに指定していますが、特に音質的に問題は無さそうです。
TVRockの録画終了後に自動的にBonTsDemuxでエンコードをするためにTVRockの「設定>プロセス>コマンドを実行する」欄に以下のように設定。
TN: E:\bin\BonTsDemux\BonTsDemux.exe -i “%1” -encode “X264_iPhone” -vf -delay -100 -nd -start -quit
録画終了後に休止状態に移行させる設定にしており、startコマンド経由にするとすぐに制御がTVRockに戻ってしまい、エンコードの終了を待たずして休止状態に移行してしまうため、startコマンドを経由せず直接実行しています。
EpgDataCap_Bonを使っている場合は、同様の場所で設定してください(使っていないので分からず)
2011.05.02~03追記: ちょっと動かしてみましたが、ffmpegが読み込めない、あるいはエンコが終了しない、そもそもMedia Player Classicなどで再生できないMPEG2 TSがいくつかありました。こういうMPEG2 TSは、TSSplitterでHDだけ分離させるとうまくいくことが多いようです。うまいこと自動処理に組み込めたら書き足したいと思います。また、TVRockからstartコマンドを使わず直接BonTsDemuxを起動すると、ffmpegのエンコードがひっかかった場合に次がつかえてしまい、なおかつシステムが休止状態に移行しないため、うまくありませんでした。録画後の休止状態移行を設定せず、BonTsDemuxはstartコマンド経由で起動。休止状態移行はTVRockの「スリープタイマー(休止)」機能(CPU使用率/ネットワーク転送量にしきい値を設け、しきい値を下回ったら休止状態に移行する機能)に任せるのがよさそうです。また、エンコ前のTSSplitterも必須なので、結局はtaskenc.vbsを利用するのが最善ということになりそうです。ただ、taskenc.vbsがWindows XPで動かないのですよね……。Power Shellを入れると動くようになるかな?
さて、iPhone/iPad向けの録画後の自動エンコードができるようになったところで、本題のVideoCastの設定です。まずはWebサーバと、VideoCastのためのcgiに必要なRubyをインストールします。
http://www.cygwin.com/
Cygwinのサイトからsetup.exeをダウンロード、実行します。
パッケージの選択のところで、画面上部に「Search」というラベルのある検索窓が表示されるので、そこでApacheと入力。ハングアップしたかのようになりますが、しばらくの後Netカテゴリの下に「apache: The Apache HTTP (Web) Server」が出てくると思います。その左にあるSkipをクリック。(スクリーンショットは既にインストール後であるため、Keepとなっています)
今度は検索窓に「Ruby」と入力。すると、またハングアップしたかのようになった後にInterpretersカテゴリの下に「ruby: Interpreted object-oriented scripting launguage」が出てきますので、左のSkipをクリック。
今度は検索窓に「cygrunsrv」と入力。すると、またハングアップしたかのようになった後にAdminカテゴリの下に「cygrunsrv: NT/W2K service initiator」が出てきますので、左のSkipをクリック。
さらに画面下の「次へ」ボタンを押し、インストールを完了させます。
以下の部分を、
Port 80
次のように書き換え。
Port 8010
UserとGroupを、
#User nobody
Group #-1
以下のように書き換え。これを書き換えておかないと、サービスから起動できません。
User Guest
Group Guests
以下の記述の下に、
<Directory "/var/www/cgi-bin"> AllowOverride None Options None Order allow,deny Allow from all </Directory>
次のディレクティブを追加。自分の環境では、F:\moviesに動画を貯めているので、F:\moviesがWebサーバで公開されるように設定しました。
各自の環境に合わせて設定してください。Cygwin版のApacheでは、見ての通り「F:\movies」を「/cygdrive/f/movies」と表現します。
Alias /movies/ "/cygdrive/f/movies/" <Directory "/cygdrive/f/movies"> Options Indexes FollowSymlinks MultiViews AllowOverride None Order allow,deny Allow from all </Directory>
上記のページを参考に、Apacheを起動します。今回はプロキシサーバとしては機能させないので、「更に、以下の内容の/etc/apache/conf.d/proxy.confを作成した」以下は読み飛ばしてOK。また、/etc/apache/httpd.confの「Listen 80」を変更する代わりに「Port 8010」に変更したのは前述の通り。
動いていれば、Webブラウザから http://127.0.0.1:8010/ にアクセスすると、Apacheの動作が確認できるでしょう。
動いていたら以下を実行して、ApacheをWindowsのサービスとして登録します。次回のOSの起動時から、自動的にApacheが実行されるようになります。
chmod 666 /var/log/apache/error_log
chmod 666 /var/log/apache/access_log
cygrunsrv -I httpd -d “Cygwin httpd” -p /usr/sbin/httpd -a -F
この通りに設定すると、「<Cygwinをインストールしたディレクトリ>/var/www/cgi-bin」がcgiの動くディレクトリになります。以下のスクリプトpt2casting.cgiを「<Cygwinをインストールしたディレクトリ>/var/www/cgi-bin」に置きます。
保存する際のエンコーディングは「UTF-8」にしてください。
pt2casting.cgiは、dircastを元にして作りました。Nihondoさんありがとうございます。
「スタートメニュー>すべてのプログラム>Cygwin>Cygwin Bash Shell」を起動。以下のように操作し、cgiに実行権を与えます。
$ chmod +x /var/www/cgi-bin/pt2casting.cgi
$ exit
さらに、「<Cygwinをインストールしたディレクトリ>/var/www/cgi-bin/pt2casting.cgi」をテキストエディタで開き、以下の2項目を自分の環境用に書き換えます。
# 配信したいファイルがあるディレクトリをフルパスで設定
# http経由でアクセスできるディレクトリを設定すること
DIR_PATH = “f:/movies”# 配信したいファイルがあるディレクトリのURL(DIR_PATHをURLで表記)
DIR_URL = “http://192.168.1.200:8010/movies”
動画ファイルを置いているディレクトリを指定します。動画ファイルを置いているローカルのディレクトリのパスと、Webサーバから見た場合のURLを指定するわけです。自宅環境では動画ファイルを置いているのはf:\moviesで、録画サーバのIPアドレスを固定にしており、それが192.168.1.200です。このパスとIPアドレスは、それぞれ違うかと思いますので、自宅環境に合わせて読み替えてください。
さあ、かなりはしょり気味できましたが、設定は完了です。
http://192.168.1.200:8010/cgi-bin/pt2casting.cgi にアクセスしてみましょう。
うまくいっていれば、RSSらしきものが表示され、DIR_PATHに指定した動画貯めディレクトリにある動画ファイルが一覧になっているかと思います。デフォルトでは、拡張子”mp3″、”m4a”、”m4v”、”mp4″、”wma”、”wmv”のファイルのみがリストアップされます。
URLをコピーして次のステップに進みます。
iTunesを起動し、メニュー「詳細>Podcastを登録」を選択。開いたダイアログにコピーしたURLを貼り付けます。
うまくいっていれば、iTunesに登録したVideoCastの中身がリストされるでしょう。登録したVideoCastの画面の下側に「設定…」というボタンがあります。ここでPodCast/VideoCastのチェック間隔や、新規のアイテムがあった場合のダウンロード規則について設定できます。
iTunesで動画をダウンロードした後、iPhone/iPadを接続し、同期。
適切に設定されていれば、iPhone/iPadに動画が自動的に転送されると思います。
ちょっと大変ですが、この環境をいったん構築すると、iPhone/iPadが化けます。
これまでiPhoneもiPadもTwitter専用機としか見えていませんでしたが、動画のカリスマ、動画のエヴァンジェリスト、そんな感じで見えてきます。
これはiPhone/iPadの第二次性徴期といっても過言でない! ぜひ挑戦してみてください。
pt2casting.cgiには引数を与えることができます。
通常古い動画が上に来るように表示されますが、「order=reverse」を追加すると新しい方が上に来るように表示されます。
http://192.168.1.200:8010/cgi-bin/pt2casting.cgi?order=reverse
デフォルトでは、対象ディレクトリにある特定拡張子を持つファイルがすべてリストアップされますが、「search=キーワード」といった具合にキーワードを指定して、キーワードを含むファイルだけをリストアップさせることができます。
http://192.168.1.200:8010/cgi-bin/pt2casting.cgi?search=まどかマギカ
ただし、キーワードはUTF-8でURLエンコードしたものを指定してください。(Windows版のiTunesではURLエンコードは不要)
URLエンコードは以下のページなどでできます。
http://home.kendomo.net/board/decode/
「まどかマギカ」をUTF-8でURLエンコードすると以下のようになります。
http://192.168.1.200:8010/cgi-bin/pt2casting.cgi?search=%E3%81%BE%E3%81%A9%E3%81%8B%E3%83%9E%E3%82%AE%E3%82%AB
この機能で専用のchannelを作ることができます。二つのVideoCastはいずれもpt2casting.cgiを利用しており、引数違いで二つ登録しているわけです。
こんな感じ。
http://192.168.1.200:8010/cgi-bin/pt2casting.cgi?order=reverse&search=%82%DC%82%C7%82%A9%83%7D%83M%83J
キーワード検索をすると、channelのタイトルが「キーワード / PT2Casting」のようになりますが、これを任意のものに置換できます。
詳しくはpt2casting.cgiを読んでください。