カテゴリー別アーカイブ: PT3

pt3の録画状況をブラウザから確認できるようにしてみた

録画状況をブラウザから確認できるようにしてみた

録画状況をブラウザから確認できるようにしてみた

予約録画時にデバイスが重なっていないか確認するために、デバッグするのがいちいち面倒になったので、fullCalendar.jsを利用して、予約状況を確認できるようにしてみた。

正式版のfullCalendarではなくて、リソースごとに表示可能なものにフォークした人がいるようで、それを利用しました。

http://ikelin.github.io/fullcalendar/index.html

ViewにresourceDayというのが指定できます。

PCだと綺麗に表示できたのですが、モバイルからだと表示がうまく行きませんでした。

avconvコマンドでtsファイルを分割(split)

WindowsだとTsSplitterというソフトがあって、それを使えば簡単に動画の分割(最初の10分だけ切り取り等)ができるようですが、Linuxでも同じことができないか調べて見ました。

日本語で「tsファイル 分割 linux」とかで検索で出てくる上位のページを見ると、wineを使ってTsSplitterを使えばいいんじゃない、という意見が大多数でした。

http://www12.atwiki.jp/edaeda/pages/14.html

TsSplitterはtsファイルから必要な部分のみを抜き出すことが出来るツールです。
Windows用のアプリですが、Linux上でもwine(Linux上で動作するWindows API)を使えば、利用可能です。

なんかそれLinuxじゃない、と思ったので、avconvでtsファイルを分割できないか英語でGoogle先生に聞いて見ました。

avconvでの動画の分割(切り取り)

「avconv split video」で英語のページを検索

http://askubuntu.com/questions/56022/what-to-use-to-quickly-cut-audio-video

avconv -i srcFileName -c:a copy -c:v copy -ss 00:03:40 -t 00:01:12 targetFileName

単純にファイルを分割したいだけなら、これでいけそうです。

オプションの解説

オプション 説明
-i INPUT リソースファイル
-c:a codec 音声のコーデック(フォーマット)
-c:v codec 動画のコーデック(フォーマット)
-ss position シーク位置(hh:mm:ss[.xxx])
-t duration 時間(hh:mm:ss[.xxx])

-c:aオプションと-c:vオプションはまとめて「-c copy」としてもいいかもしれません。

コーデック指定時に、「copy」と指定すれば再エンコードは発生せず、単純に分割処理が行われるようです。

30分のtsファイルを20分だけ切り取りしたところ、2分程度で完了しました。

以下の例だと、対象ファイルの開始30分から30分間の動画ファイルを作成します。

avconv -i "1時間の録画データ.ts" -c:a copy -c:v copy -ss 00:30:00 -t 00:60:00 "30分〜60分.ts"

まとめて番組を録画して、あとで分割したい時は、こんな風に利用できそうです。

avconv -i "1時間の録画データ.ts" -c:a copy -c:v copy -ss 00:00:00 -t 00:30:00 "00分〜30分.ts"
avconv -i "1時間の録画データ.ts" -c:a copy -c:v copy -ss 00:30:00 -t 00:30:00 "30分〜60分.ts"

スマートフォンからPT3の予約録画をできるようにしてみた(その2)

自前で作っていたPT3の予約録画で、予約のキャンセルができるようになりました。

Screenshot_2013-07-22-19-20-08

予約したデータを一覧で表示して、詳細をクリック。

Screenshot_2013-07-22-19-56-28

「この予約をキャンセルする」をクリックして、キャンセルが完了。

Screenshot_2013-07-22-19-56-41

キャンセル機能を作るのは意外と簡単でした(´・ω・`)

avconvの使い方

Linuxで動画/音声のエンコードソフトにFFmpegというのがあります。一応、Windows版でも配布されているようですが、コマンドラインから使用するため、ちょっととっつきにくいソフトです。

http://ja.wikipedia.org/wiki/FFmpeg

2011年3月13日に FFmpeg の開発は、開発体制の対立から ffmpeg.org と libav.org に分裂した。どちらも、ffmpeg というソフトウェアをリリースしているが、Libav英語版) 側は avconv に名称を切り替える作業を進めている。この分裂に伴い、Debian[3]Ubuntu[4] 11.04, Gentoo Linux は Libav 側を採用した。

いつの間にか分裂してたんですね(´・ω・`)

Ubuntuだと、ffmpegではなくavconvを使うのが一般的なようです。

インストール方法

Ubuntu 12.0.4ではは以下のコマンドで取得できます。

$ sudo apt-get install libav-tools

ただし、libx264オプション(H.264 )に対応するために、コーデックを追加インストールしないといけないみたいです。

以下のコマンドでインストール。

$ sudo apt-get install libavcodec-extra-53

AACはH.264とセット(つまりはMPEG4)で利用される音声コーデックで、PSPやiPod、スマートフォンでよく使用されています。

昔のffmpegだとlibfaacオプションで、AACのエンコードができたのですが、特許関連の問題があったのか、ある時期を境に使用できなくなりました。

現在、フリーのAACコーデックを利用する、libvo_aacencオプションを指定をすれば可能なようです。

http://en.wikipedia.org/wiki/FAAC

FAAC or Freeware Advanced Audio Coder is a software project which includes the AAC encoder FAAC and decoder FAAD2.

というわけで、avconvで同一のクオリティのMPEG4動画を作成するには以下のようにコマンドを打ちます(WikipediaのFFmpegオプション参照)。

$ avconv -i "元データ" -c:v libx264 -c:a libvo_aacenc -cqp 23 -aq 100 "エンコードデータ"

PT3でテレビ番組の予約録画を完了してから、エンコードするように試してみたのですが、自鯖の環境(AMD Opteron Processor 3280 8コア )では30分動画が35分くらいでエンコードされました。

自前で最適化したFFmpegを利用すればもっと早くなるんでしょうか(´・ω・`)

これを応用して、スマートフォン用の動画を作成するよう拡張してみようかな。

$ avconv -i "元データ" -s ega -c:v libx264 -c:a libvo_aacenc -cqp 23 -aq 100 "エンコードデータ"

こんな感じ?(´・ω・`)

スマートフォンからPT3の予約録画をできるようにしてみた

先週は、epgdumpからデータを吸い出して番組情報を検索できるまでになった。

今週は、PHP経由でatコマンドを叩く仕組みを作って、PT3で予約録画ができるようにしてみた。

Bootstrapを利用してページを作成したので、スマートフォンからのアクセスもばっちりです(´・ω・`)

検索して、

スマートフォンから検索1

クリックすると、詳細が出てきました。

スマートフォンから検索2

ボタンを押したら、atコマンドで予約完了です。

スマートフォンから録画1予約

ただし、予約状況を確認して、使用していない録画デバイスを選択する機能がまだ未実装なので、同じ時間帯で録画しようとするとNGです(´・ω・`)

来週には修正できそう?

epgdumpで番組情報を取得してPHPから検索できるようにしてみた

epgdumpコマンドで吸いだしたXMLファイルをPHPで整形してMySQLへ保存して、ブラウザから表示できるようにしてみた。

番組情報を収集

番組情報を収集

Webブラウザ経由でepgdumpを実行して、取り出したデータをMySQLへインポートもできるようになりました。

ブラウザからepgdump実行

実行中のイメージ。

ブラウザからepgdump実行中

epgdumpでBSの番組情報を取得する

BS放送の場合、EPG(電子番組ガイド)のデータは、チャンネルごとに番組のデータが送られているわけではなく全チャンネルの番組情報が取得できてしまうようです。

epgdumpコマンドで取得したところ、xmlでチャンネルが取得できました。吸いだしたデータをPHPで整形して出力してみた。

チャンネル チャンネル名
101 NHKBS1
102 NHKBS1
103 NHKBSプレミアム
13 NHK(教育)
141 BS日テレ
151 BS朝日1
153 BS朝日3
161 BS−TBS
171 BSジャパン
18 中部日本放送
181 BSフジ・181
19 中京テレビ
191 WOWOWプライム
192 WOWOWライブ
193 WOWOWシネマ
20 NHK(総合)
200 スター・チャンネル1
201 スター・チャンネル2
202 スター・チャンネル3
21 東海テレビ
211 BS11
22 名古屋テレビ
222 TwellV
23 テレビ愛知
231 放送大学BS1
232 放送大学BS2
233 放送大学BS3
234 グリーンチャンネル
236 BSアニマックス
238 FOXbs238
241 BSスカパー!
242 J SPORTS 1
243 J SPORTS 2
244 J SPORTS 3
245 J SPORTS 4
251 BS釣りビジョン
252 イマジカBS
255 BS日本映画専門ch
256 ディズニーチャンネル
258 Dlife
27 三重テレビ放送
291 NHK総合1・東京
292 NHKEテレ東京
294 日テレ1
295 テレビ朝日
296 TBS1
297 テレビ東京1
298 フジテレビ
531 放送大学ラジオ
755 BS朝日データ755
777 株価情報
791 navi
792 navi
800 スター・チャンネル
910 WNI・910

なんか有料放送の情報も取得できるようです。有料なのに取れるのはちょっと面倒な気もしますが……。

Ubuntu Linux上のPT3でEPG情報を取得する方法(epgdump)

テレビ番組情報を取得するにはepgdumpというコマンドツールがあるようなのですが、検索するとgithubには同名のものが2つありました。どちらも同じソースコードを元にして作成されているようです。

使用経験もあるので、僕はhttps://github.com/Piro77/epgdumpを利用してみました。

インストール(コンパイル)方法

gitで取得。gitはインストールしてね(^^)

$ git clone https://github.com/Piro77/epgdump

コマンドを実行したディレクトリにepgdumpディレクトリが作成されているので、そこから続けてコマンドを入力。

$ cd ./epgdump
$ ./autogen.sh
$ ./configure
$ make
$ make install

以上のコマンドを実行し終わったら、ディレクトリ内にepgdumpのバイナリが作成されているはず。

epgdumpが誰でも使えるように/usr/local/binに保存する。

$ sudo cp ./epgdump /usr/local/bin

–helpオプションをつけて試しに実行してみる。

$ epgdump --help
 Usage : epgdump <tsFile> <outfile>
 Usage : epgdump csv <tsFile> <outfile>
 Usage : epgdump json <tsFile> <outfile>
 Usage : epgdump check <device> <sid> <eventid> <eventtime>
 Usage : epgdump wait <device> <sid> <eventid> <maxwaitsec>
 csv csv output mode
 json json output mode
 check check event
 wait wait event
 VERSION : 0.2.0

実行方法

まずは手元にepg情報が含まれているTVの録画ファイル(.ts)が必要なので、インストールしたrecpt1コマンドで適当な録画ファイルを作成する。

チャンネルは27、96秒間記録して、hoge.tsファイルへ保存。

$ recpt1 --b25 --strip --device /dev/pt3video2 27 96 "hoge.ts"

作者のページ(http://d.hatena.ne.jp/piro77/20120917/1347889959)によれば、地上デジタルでepgのデータ取得にかかる時間は96秒くらいだと述べております(ストリーム読み込みですが)。コメントには地上デジタルだと60秒+20秒で80秒くらいが無難ともいわれていますが、このへんの最適値はご自分で求めましょう。

“hoge.ts”というファイルができたので、epgdumpでデータを取得してみる。

$ epgdump "./hoge.ts" "./27ch.xml"

ちなみに、CSV形式とJSON形式にも対応しています。

$ epgdump csv "./hoge.ts" "./27ch.csv"
$ epgdump json "./hoge.ts" "./27ch.js"

ストリーム対応しているそうですが、コマンドでどう取得すればいいのかわかりません(^_^;)

ls /dev/pt*

PT3 の2枚使用時のメモ(Linux Ubuntu Server 12.04)

とりあえずいろんなWebサイトに掲載されているPT3のLinuxの設定方法を斜め読みしながら、recpt1コマンドでtsファイルが保存できるところまでやってみた。

使用したPT3は2枚であったため、ドライバをインストールして、デバイスを以下のコマンドで確認してみた。

ls -1 /dev/pt3*

すると、

/dev/pt3video0
/dev/pt3video1
/dev/pt3video2
/dev/pt3video3
/dev/pt3video4
/dev/pt3video5
/dev/pt3video6
/dev/pt3video7

と表示されたのだが、recpt1コマンドを行う場合、地上デジタル放送と衛星放送がどれなのかわからない。

試しに、”/dev/pt3video0″と”/dev/pt3video1″で27chを出力してみた。

$ recpt1 --b25 --strip --device /dev/pt3video0 21 10 "hoge.ts"
using B25...
enable B25 strip
using device: /dev/pt3video0
pid = 3380
Cannot tune to the specified channel: /dev/pt3video0
$ recpt1 --b25 --strip --device /dev/pt3video1 21 10 "hoge.ts"
using B25...
enable B25 strip
using device: /dev/pt3video1
pid = 3384
Cannot tune to the specified channel: /dev/pt3video1

どっちもエラー……。いろいろ調べると、どうも、以下のようです。ひょっとしたらドライバのバージョンとかで変わってしまうかもしれません。

BS
/dev/pt3video0
/dev/pt3video1
/dev/pt3video4
/dev/pt3video5

地上波
/dev/pt3video2
/dev/pt3video3
/dev/pt3video6
/dev/pt3video7

物理的な端子の順番と、デバイス名に違和感が……。