自動録画のサンプルコード (ふわっち)
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