BareGit

ffmagick: add option to set output dir.

Author: MetroWind <chris.corsair@gmail.com>
Date: Sun Nov 2 14:54:22 2025 -0800
Commit: fbd38acebbced481c0487e15313dabc924da2cb3

Changes

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