自動録画のサンプルコード (ふわっち)

Note 1: QUALITYの最高品質はユーザーによっては無い場合もある
Note 2: ffmpegのオプションは膨大
Note 3: 予告なく動かなくなる

使用ライブラリ: requests, これ
使用ソフト: python3, ffmpeg

#!/usr/bin/env python3


import datetime
import time
import subprocess
import threading
import os

import whowatch # これ https://drunkenness.hatenablog.com/entry/2019/03/09/023638
import requests


def create_url(live_id):
    URL = 'https://api.whowatch.tv/lives/{}/play'.format(live_id)
    # QUALITY = '1veryhigh' # 最高品質
    QUALITY = '2high' # 高品質
    # QUALITY = '3medium' # 中品質
    # QUALITY = '4low' # 低品質
    json = requests.get(URL).json()
    result = json['hls_url'].replace(
            '/playlist.m3u8', '_{}/playlist.m3u8'.format(QUALITY))
    return result

def now():
    return datetime.datetime.strftime(
            datetime.datetime.now(), '%Y年%m月%d日%H時%M分%S秒')

def record(userid_list, userid, live_userid):
    url = create_url(live_userid)

    output_directory = os.path.join(
            os.path.expanduser('~'), 'Videos', 'whowatch')
    if not os.path.exists(output_directory):
        os.makedirs(output_directory)
    filename = os.path.join(output_directory,
            '{}-{}.ts'.format(userid[2:], now()))

    prg = ['ffmpeg', '-hide_banner', '-loglevel', 'panic',
            '-i', url, '-f', 'mpegts', filename]

    # recording starts
    userid_list.remove(userid) # 録画中のユーザーをチェックリストから外す
    print('[+][Rec] {} {}'.format(now(), userid))
    subprocess.run(prg, stdout=subprocess.DEVNULL)

    # recording finishes
    userid_list.append(userid) # チェックリストにユーザーを戻す
    print('[-][Rec] {} {}'.format(now(), userid))


if __name__ == '__main__':

    SLEEP = 5
    userid_list = [
            'w:1',
            'w:2',
            'w:3',
            ]

    api = whowatch.LiveAPI()

    while True:
        api.update()
        live_user_list = [userid for userid in userid_list if api.exists(userid)]
        for live_userid in live_user_list:
            info = api.get_user_info(live_userid)
            t = threading.Thread(target=record,
                    args=(userid_list, live_userid, info.id))
            t.start()
        time.sleep(SLEEP)

実行結果

$ python3 rec.py
[+][Rec] 2019年03月09日05時02分15秒 ****
[-][Rec] 2019年03月09日05時02分20秒 ****
$ ls ~/Videos/whowatch
****-2019年03月09日05時02分15秒.ts