implement scrapy + pygea job runner

This commit is contained in:
Abel Luck 2026-03-30 15:04:41 +02:00
parent 916968c579
commit 8af28c2f68
8 changed files with 888 additions and 163 deletions

View file

@ -54,12 +54,25 @@ class VideoMeta(TypedDict):
bit_rate: float
def _decode_ffmpeg_output(output: Any) -> str:
if isinstance(output, bytes):
return output.decode("utf-8", errors="replace")
return str(output)
def _print_ffmpeg_error_output(error: ffmpeg.Error) -> None:
if error.stderr:
print(_decode_ffmpeg_output(error.stderr), file=sys.stderr)
if error.stdout:
print(_decode_ffmpeg_output(error.stdout))
def probe_media(file_path) -> Dict[str, Any]:
"""Probes `file_path` using ffmpeg's ffprobe and returns the data."""
try:
return ffmpeg.probe(file_path)
except ffmpeg.Error as e:
print(e.stderr, file=sys.stderr)
_print_ffmpeg_error_output(e)
logger.error(f"Failed to probe io {file_path}")
logger.error(e)
raise RuntimeError(f"Failed to probe io {file_path}") from e
@ -217,7 +230,7 @@ def transcode_audio(input_file: str, output_dir: str, params: Dict[str, str]) ->
**params,
loglevel="quiet",
)
.run()
.run(capture_stdout=True, capture_stderr=True)
)
before = os.path.getsize(input_file) / 1024
after = os.path.getsize(output_file) / 1024
@ -229,8 +242,7 @@ def transcode_audio(input_file: str, output_dir: str, params: Dict[str, str]) ->
)
return output_file
except ffmpeg.Error as e:
print(e.stderr, file=sys.stderr)
print(e.stdout)
_print_ffmpeg_error_output(e)
logger.error(e)
raise RuntimeError(f"Failed to compress audio {input_file}") from e
@ -310,7 +322,7 @@ def transcode_video(input_file: str, output_dir: str, params: Dict[str, Any]) ->
**params,
# loglevel="quiet",
)
.run()
.run(capture_stdout=True, capture_stderr=True)
)
else:
passes = params["passes"]
@ -323,16 +335,18 @@ def transcode_video(input_file: str, output_dir: str, params: Dict[str, Any]) ->
"-stats"
)
logger.info("Running pass #1")
std_out, std_err = ffoutput.run(capture_stdout=True)
print(std_out)
print(std_err)
ffoutput.run(capture_stdout=True, capture_stderr=True)
logger.info("Running pass #2")
ffoutput = ffinput.output(video, audio, output_file, **passes[1])
ffoutput = ffoutput.global_args(
# "-loglevel", "quiet",
"-stats"
)
ffoutput.run(overwrite_output=True)
ffoutput.run(
capture_stdout=True,
capture_stderr=True,
overwrite_output=True,
)
before = os.path.getsize(input_file) / 1024
after = os.path.getsize(output_file) / 1024
@ -344,7 +358,7 @@ def transcode_video(input_file: str, output_dir: str, params: Dict[str, Any]) ->
)
return output_file
except ffmpeg.Error as e:
print(e.stderr, file=sys.stderr)
_print_ffmpeg_error_output(e)
logger.error("Failed to transcode")
logger.error(e)
raise RuntimeError(f"Failed to transcode video: {e.stderr.decode()}") from e