kopia lustrzana https://github.com/corrscope/corrscope
Reorganize outputs.py
rodzic
d62d1203a0
commit
c27749f0e0
|
@ -41,28 +41,7 @@ def register_output(config_t: Type[OutputConfig]):
|
||||||
return inner
|
return inner
|
||||||
|
|
||||||
|
|
||||||
FFMPEG = 'ffmpeg'
|
# FFmpeg input format
|
||||||
FFPLAY = 'ffplay'
|
|
||||||
|
|
||||||
|
|
||||||
assert RGB_DEPTH == 3
|
|
||||||
def ffmpeg_input_video(cfg: 'Config') -> List[str]:
|
|
||||||
fps = cfg.fps
|
|
||||||
width = cfg.render.width
|
|
||||||
height = cfg.render.height
|
|
||||||
|
|
||||||
return [f'-f rawvideo -pixel_format rgb24 -video_size {width}x{height}',
|
|
||||||
f'-framerate {fps}',
|
|
||||||
'-i -']
|
|
||||||
|
|
||||||
|
|
||||||
def ffmpeg_input_audio(audio_path: str) -> List[str]:
|
|
||||||
return ['-i', audio_path]
|
|
||||||
|
|
||||||
|
|
||||||
FFMPEG_OUTPUT_VIDEO_DEFAULT = '-c:v libx264 -crf 18 -bf 2 -flags +cgop -pix_fmt yuv420p -movflags faststart'
|
|
||||||
FFMPEG_OUTPUT_AUDIO_DEFAULT = '-c:a aac -b:a 384k'
|
|
||||||
|
|
||||||
|
|
||||||
class _FFmpegCommand:
|
class _FFmpegCommand:
|
||||||
def __init__(self, templates: List[str], ovgen_cfg: 'Config'):
|
def __init__(self, templates: List[str], ovgen_cfg: 'Config'):
|
||||||
|
@ -82,7 +61,8 @@ class _FFmpegCommand:
|
||||||
if process_args is None:
|
if process_args is None:
|
||||||
process_args = []
|
process_args = []
|
||||||
|
|
||||||
return subprocess.Popen(self._generate_args() + process_args, stdin=subprocess.PIPE, **kwargs)
|
return subprocess.Popen(self._generate_args() + process_args,
|
||||||
|
stdin=subprocess.PIPE, **kwargs)
|
||||||
|
|
||||||
def _generate_args(self) -> List[str]:
|
def _generate_args(self) -> List[str]:
|
||||||
return [arg
|
return [arg
|
||||||
|
@ -90,6 +70,21 @@ class _FFmpegCommand:
|
||||||
for arg in shlex.split(template)]
|
for arg in shlex.split(template)]
|
||||||
|
|
||||||
|
|
||||||
|
assert RGB_DEPTH == 3
|
||||||
|
def ffmpeg_input_video(cfg: 'Config') -> List[str]:
|
||||||
|
fps = cfg.fps
|
||||||
|
width = cfg.render.width
|
||||||
|
height = cfg.render.height
|
||||||
|
|
||||||
|
return [f'-f rawvideo -pixel_format rgb24 -video_size {width}x{height}',
|
||||||
|
f'-framerate {fps}',
|
||||||
|
'-i -']
|
||||||
|
|
||||||
|
|
||||||
|
def ffmpeg_input_audio(audio_path: str) -> List[str]:
|
||||||
|
return ['-i', audio_path]
|
||||||
|
|
||||||
|
|
||||||
class ProcessOutput(Output):
|
class ProcessOutput(Output):
|
||||||
def open(self, popen: subprocess.Popen):
|
def open(self, popen: subprocess.Popen):
|
||||||
self._popen = popen
|
self._popen = popen
|
||||||
|
@ -109,10 +104,12 @@ class ProcessOutput(Output):
|
||||||
@dataclass
|
@dataclass
|
||||||
class FFmpegOutputConfig(OutputConfig):
|
class FFmpegOutputConfig(OutputConfig):
|
||||||
path: str
|
path: str
|
||||||
video_template: str = FFMPEG_OUTPUT_VIDEO_DEFAULT
|
video_template: str = '-c:v libx264 -crf 18 -bf 2 -flags +cgop -pix_fmt yuv420p -movflags faststart'
|
||||||
audio_template: str = FFMPEG_OUTPUT_AUDIO_DEFAULT
|
audio_template: str = '-c:a aac -b:a 384k'
|
||||||
|
|
||||||
|
|
||||||
|
FFMPEG = 'ffmpeg'
|
||||||
|
|
||||||
@register_output(FFmpegOutputConfig)
|
@register_output(FFmpegOutputConfig)
|
||||||
class FFmpegOutput(ProcessOutput):
|
class FFmpegOutput(ProcessOutput):
|
||||||
def __init__(self, ovgen_cfg: 'Config', cfg: FFmpegOutputConfig):
|
def __init__(self, ovgen_cfg: 'Config', cfg: FFmpegOutputConfig):
|
||||||
|
@ -129,6 +126,8 @@ class FFplayOutputConfig(OutputConfig):
|
||||||
audio_template: str = '-c:a copy'
|
audio_template: str = '-c:a copy'
|
||||||
|
|
||||||
|
|
||||||
|
FFPLAY = 'ffplay'
|
||||||
|
|
||||||
@register_output(FFplayOutputConfig)
|
@register_output(FFplayOutputConfig)
|
||||||
class FFplayOutput(ProcessOutput):
|
class FFplayOutput(ProcessOutput):
|
||||||
def __init__(self, ovgen_cfg: 'Config', cfg: FFplayOutputConfig):
|
def __init__(self, ovgen_cfg: 'Config', cfg: FFplayOutputConfig):
|
||||||
|
|
Ładowanie…
Reference in New Issue