ffmpeg と python を使ってテレビ録画ライブラリ

テレビのアンテナを立てず、インターネットだけでテレビの番組を録画してライブラリに自動的に転送して jstree で閲覧します。

ffmpeg で録画する

NAS 上の virtual machine に linux mint を置いて、以下のようなシェルスクリプトを作成します。


#/bin/sh

filename=`date +%y-%m-%d_%H:%M:%S`
ffmpeg -i http://redlabmcdn.s.llnwi.net/hoge/index.m3u8 -c copy -bsf:a aac_adtstoasc ~/data/BSTBS/$filename.mp4

cron に時刻・録画時間を設定します。
例えば、「ヒロシのぼっちキャンプ」であれば毎週水曜日の午後 10 時から 54 分間なので、以下のようになります。


00 22 * * wed timeout 3240 ~/shell/BSTBS.sh

録画ファイルを NAS の jstree へコピーする

録画されたファイルを、NAS のホストマシン、jstree へコピーします。
自宅内の端末から閲覧するためです。
もちろん、最近 fireTV にしたのでテレビからもアクセスできます。


import paramiko
import scp

class NetTV():
    
    def __init__( self ):
        self.host = '192.168.0.18'
        self.user = 'user'
        self.password = 'pass'
        self.port = 11123
        self.localpath = '/home/user/data'
        self.remotepath = '/volume1/web/jstree/'

    def scp_put( self ): 
       with paramiko.SSHClient() as ssh:
          ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
          ssh.connect(self.host, port=self.port, username=self.user, password=self.password)        
          with scp.SCPClient(ssh.get_transport()) as scpc:          
             try:         
                scpc.put( self.localpath, recursive=True, remote_path = self.remotepath )
             except:
                print('そのディレクトリは存在しません。')

if __name__ == '__main__':
   ntv = NetTV()
   ntv.scp_put()

jstree で閲覧する

jstree 環境が整っていれば以下のようにして動画を閲覧できます。
以下は「踊るさんま御殿」です。

jstree の素晴らしいところは、置くだけで php が data フォルダを解析してフォルダツリーを勝手に作成してくれることです。
なので、virtual machine から mp4 を data フォルダごとコピーするようにしました。

jstree の導入は少し面倒ですが、3 年ほど前に作ったものを使い回しています。