implement scrapy + pygea job runner
This commit is contained in:
parent
916968c579
commit
8af28c2f68
8 changed files with 888 additions and 163 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue