turtlechanのブログ

無知の私がLinuxをいじりながら書いていくブログ

【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で書いてみました。

参考になれば幸いです。