【Python】超A&Gを再生してみた
超A&Gを再生するスクリプト。
超A&Gをブラウザを使わずに再生したかったので今回作ってみた。主にラズパイで再生したかったのでCUI環境で動くようにしてある。
※python2で書いてます。
超A&Gの再生
agqr.py
#! /usr/bin/env python # coding: utf-8 import time import argparse import subprocess class Agqr(object): '''超A&Gのクラス''' # クラス変数 _instance = None _process = None def __new__(cls, *args, **kwargs): if cls._instance is None: cls._instance = super(Agqr, cls).__new__(cls) return cls._instance def __init__(self): '''初期化メソッド''' print('Agqr __init__') # インスタンス変数 self.url = 'rtmp://fms-base1.mitene.ad.jp' self.app = 'agqr' self.playpath = 'aandg1' def play(self, cache=5242880): '''再生する''' if self.__class__._process: self.quit() cmd = 'ffplay -nodisp -loglevel quiet -rtmp_buffer {0} -i {1}/{2}/{3}'.format(cache, self.url, self.app, self.playpath) self.__class__._process = subprocess.Popen(cmd.split(' '), bufsize=0, stdout=subprocess.PIPE) def quit(self): '''停止する''' self.__class__._process.terminate() self.__class__._process = None def main(): if args.kill: print('{0}をpkillします。'.format(args.kill)) subprocess.call(('pkill', args.kill)) # Agqrクラスのインスタンス生成 agqr = Agqr() agqr.play() time.sleep(args.duration) # 指定した時間まで待機 agqr.quit() if __name__ == '__main__': # # argparseインスタンス生成 parser = argparse.ArgumentParser( prog='agqr.py', usage='agqr.py [option] ...', description='超A&GをCUI環境で再生するために作ったスクリプト。', epilog='end', add_help=True ) # 引数(オプション)の設定 parser.add_argument('-d', '--duration', help='再生時間(秒)', type=int, nargs='?', const=1800, default=60) parser.add_argument('-c', '--cache', help='キャッシュ(byte)', type=int, nargs='?', default=5242880) parser.add_argument('-k', '--kill', help='指定したプロセスを終了', type=str, nargs='?', const='ffplay') # 生成 args = parser.parse_args() # # メイン関数の実行 main()
ffmpeg に付属している ffplay に丸投げして再生してます。最初に書いたようにCUI環境で動くようにしているので、映像は表示されない。
cmd = 'ffplay -nodisp -loglevel quiet -rtmp_buffer {0} -i {1}/{2}/{3}'.format(cache, self.url, self.app, self.playpath)
の行の -nodisp を消せば映像も再生されます。
使い方ですが
~$ python agqr.py -d 3600
と入力すれば、一時間(3600秒)再生されます。-dオプションを指定しなければ60秒間再生されます。
おわりに
ネットで検索してみるとシェルスクリプトで簡単にできるようだったが、私はシェルスクリプトに馴染みがない。ラジコ再生もPythonで書いたので流れで今回もPythonで書いてみました。
参考になれば幸いです。