Skip to content

Commit f87872d

Browse files
(api-break) generalize run_and_record's options
1 parent afd9470 commit f87872d

File tree

1 file changed

+16
-5
lines changed

1 file changed

+16
-5
lines changed

src/asyncpygame/_runner.py

+16-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
__all__ = ("run", "quit", "run_and_record", )
22

3+
from collections.abc import Iterator
34
import pygame
45
import asyncpygame as ap
56

@@ -45,11 +46,22 @@ def run(main_func, *, fps=30, auto_quit=True):
4546
main_task.cancel()
4647

4748

48-
def run_and_record(main_func, *, fps=30, auto_quit=True, output_file="./output.mkv", overwrite=False, codec='libx265',
49-
quality=0):
49+
def run_and_record(main_func, *, fps=30, auto_quit=True, outfile="./output.mkv", overwrite=False,
50+
outfile_options: Iterator[str]=r"-codec:v libx265 -qscale:v 0".split()):
5051
'''
5152
Runs the program while recording the screen to a video file using ffmpeg.
5253
Requires numpy.
54+
55+
.. code-block::
56+
57+
# H.265/HEVC, maximum quality (default)
58+
run_and_record(..., outfile_options=r"-codec:v libx265 -qscale:v 0".split())
59+
60+
# H.265/HEVC, lossless compression
61+
run_and_record(..., outfile_options=r"-codec:v libx265 -x265-params lossless=1".split())
62+
63+
# WebP, lossless compression, infinite loop
64+
run_and_record(..., outfile_options=r"-codec:v libwebp -lossless 1 -loop 0".split(), outfile="./output.webp")
5365
'''
5466
import subprocess
5567
from numpy import copyto as numpy_copyto
@@ -75,9 +87,8 @@ def run_and_record(main_func, *, fps=30, auto_quit=True, output_file="./output.m
7587
'-framerate', str(fps),
7688
'-i', '-', # stdin as the input source
7789
'-an', # no audio
78-
'-codec:v', codec,
79-
'-qscale:v', str(quality),
80-
output_file,
90+
*outfile_options,
91+
outfile,
8192
)
8293
process = subprocess.Popen(ffmpeg_cmd, stdin=subprocess.PIPE, bufsize=0)
8394
output_buffer = _create_output_buffer_for_surface(screen)

0 commit comments

Comments
 (0)