From fbd38acebbced481c0487e15313dabc924da2cb3 Mon Sep 17 00:00:00 2001 From: MetroWind Date: Sun, 2 Nov 2025 14:54:22 -0800 Subject: ffmagick: add option to set output dir. --- ffmagick/ffmagick.py | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) (limited to 'ffmagick/ffmagick.py') diff --git a/ffmagick/ffmagick.py b/ffmagick/ffmagick.py index 08191bc..794bb4d 100644 --- a/ffmagick/ffmagick.py +++ b/ffmagick/ffmagick.py @@ -130,8 +130,15 @@ class Configuration: if p.name == name: return p -def runOnce(config, profile, input_file): - output_file = os.path.splitext(input_file)[0] + "." + profile.output_ext +def runOnce(config, profile, input_file, output_dir): + if output_dir is None: + output_file = os.path.splitext(input_file)[0] + "." + profile.output_ext + else: + output_file = os.path.join(output_dir, os.path.basename(input_file)) + output_file = os.path.splitext(output_file)[0] + "." + \ + profile.output_ext + if not os.path.exists(output_dir): + os.makedirs(output_dir) if profile.processor == Processor.FFMPEG: cmd = "\"{}\" -y -i \"{}\" {} \"{}\"".format( config.ffmpeg_bin, input_file, profile.command, output_file) @@ -141,11 +148,11 @@ def runOnce(config, profile, input_file): return subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True) -def runAll(config, profile, input_files): +def runAll(config, profile, input_files, output_dir): bar = Progress("Processing", max=len(input_files)) for f in input_files: bar.next() - result = runOnce(config, profile, f) + result = runOnce(config, profile, f, output_dir) if result.returncode != 0: bar.finish() print("ERROR: failed to process {}. Log:\n") @@ -168,6 +175,10 @@ def main(): parser.add_argument("--list-config-files", action="store_true", dest="should_list_conf_files", help="List all config files found") + parser.add_argument("-o", "--output-dir", metavar="DIR", dest="output_dir", + help="Write the processed files into directory DIR. " + "Create if not exists. Default: same directory as the " + "input files.") args = parser.parse_args() config = Configuration.get() @@ -186,7 +197,11 @@ def main(): print("Profile needed") return 1 - if not runAll(config, config.getProfile(args.profile), args.files): + output_dir = None + if "output_dir" in args: + output_dir = args.output_dir + if not runAll(config, config.getProfile(args.profile), args.files, + output_dir): return 1 return 0 -- cgit v1.2.3-70-g09d2