hemisphere/src/overlay/__main__.py

38 lines
1.2 KiB
Python

import argparse
import subprocess
import shlex
import threading
from .obs import OBSScene
from .twitch_chat import make_twitch_chat
parser = argparse.ArgumentParser()
parser.add_argument('infile', type=argparse.FileType('r'), help='scene description file')
parser.add_argument('--nick-font', default='/Users/partynorge/down/Montserrat/Montserrat-Bold.ttf')
parser.add_argument('--chat-font', default='/Users/partynorge/down/Montserrat/Montserrat-Light.ttf')
parser.add_argument('-n', '--nickname', help='Twitch chat nickname', default='shizacular')
parser.add_argument('-t', '--token', help='Twitch OAuth token')
parser.add_argument('-p', '--preview', help='preview using mpv', default=False, action='store_true')
parser.add_argument('channel', help='Twitch channel')
args = parser.parse_args()
# Load scene
scene = OBSScene()
scene.load(args.infile)
# Convert scene graph
graph = scene.to_ffmpeg()
graph.fixup()
ffmpeg_args = graph.format()
if args.preview:
# Launch background runners
graph.run()
# Launch main process
subprocess.run('ffmpeg ' + ' '.join(shlex.quote(a) for a in ffmpeg_args) + ' -f nut -c:v libx264 -preset veryfast pipe:1 | mpv -', shell=True)
else:
raise ValueError('TODO')