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