From d43fcd530c4c25c520d8d2a0cd19dbe872d08394 Mon Sep 17 00:00:00 2001 From: Lucas Vivo Date: Mon, 26 Oct 2026 10:22:06 +0100 Subject: [PATCH] feat(ffmpeg handling): add return value for cmd_ function if files need to be moved --- media_editing/ffmpeg_handling.py | 64 +++++++++++++++++--------------- 1 file changed, 34 insertions(+), 30 deletions(-) diff --git a/media_editing/ffmpeg_handling.py b/media_editing/ffmpeg_handling.py index 9bd9fc7..7f81c0b 100755 --- a/media_editing/ffmpeg_handling.py +++ b/media_editing/ffmpeg_handling.py @@ -470,7 +470,7 @@ def cmd_convert_av(args): # Prevents FFmpeg from trying to guess/add extra default streams map_metadata=0, ) - return out + return True, out def cmd_convert_audio(args): @@ -493,7 +493,7 @@ def cmd_convert_audio(args): map="0", map_metadata=0, ) - return out + return True, out def cmd_convert_video(args): @@ -513,7 +513,7 @@ def cmd_convert_video(args): map="0", map_metadata=0, ) - return out + return True, out def cmd_remove_subs(args): @@ -561,7 +561,7 @@ def cmd_remove_subs(args): logger.debug("%s", " ".join(cmd)) if args.dry_run: logger.debug(f"Dry run: {' '.join(cmd)}") - return "nooutputneeded" + return True, "nooutputneeded" try: subprocess.run( cmd, @@ -575,7 +575,7 @@ def cmd_remove_subs(args): logger.error("STDOUT:\n%s", e.stdout) logger.error("STDERR:\n%s", e.stderr) raise - return "nooutputneeded" + return True, "nooutputneeded" def cmd_remove_audio_track(args): @@ -594,7 +594,7 @@ def cmd_remove_audio_track(args): ] if not remaining_audio: logger.error("No audiotracks remaining") - return False + return False, "nooutputneeded" remaining_audio = translate_audio_tracks(remaining_audio) removed_was_default = any( @@ -639,7 +639,7 @@ def cmd_remove_audio_track(args): logger.trace(" ".join(cmd)) if args.dry_run: logger.debug(f"Dry run: {' '.join(cmd)}") - return "nooutputneeded" + return True, "nooutputneeded" try: result = subprocess.run( cmd, @@ -649,7 +649,7 @@ def cmd_remove_audio_track(args): ) logger.debug("FFmpeg subprocess successful") logger.trace(result.stdout) - return "nooutputneeded" + return True, "nooutputneeded" except subprocess.CalledProcessError as e: logger.error( @@ -683,7 +683,7 @@ def cmd_extract_audio_track(args): out = ffmpeg.output( extracted_audio, output_audio, acodec="libmp3lame", audio_bitrate="192k" ) - return out + return True, out def cmd_downsize(args): @@ -717,7 +717,7 @@ def cmd_downsize(args): acodec="copy", scodec=get_scodec(args.output), ) - return out + return True, out def cmd_filter_audio(args): @@ -834,7 +834,7 @@ def cmd_filter_audio(args): scodec=get_scodec(args.output), ).global_args(*metadata_args) - return out + return True, out def cmd_cut_segment(args): @@ -866,7 +866,7 @@ def cmd_cut_segment(args): scodec=get_scodec(args.output), ) logger.trace(f"Command: {out}") - return out + return True, out def cmd_set_primary_audio(args): @@ -925,7 +925,7 @@ def cmd_set_primary_audio(args): **out_kwargs, ) - return out + return True, out def cmd_show_metadata(args, show_metadata=False): @@ -951,7 +951,7 @@ def cmd_show_metadata(args, show_metadata=False): # else: # for k, v in tags.items(): # logger.info(f"{k}: {v}") - return format_tags + return False, format_tags def cmd_set_metadata(args): @@ -971,7 +971,7 @@ def cmd_set_metadata(args): cmd = ["kid3-cli", "-c", f"set {args.key} '{args.value}'", args.input] if args.dry_run: logger.debug(f"Dry run: {' '.join(cmd)}") - return "nooutputneeded" + return True, "nooutputneeded" result = subprocess.run( cmd, capture_output=True, @@ -979,7 +979,7 @@ def cmd_set_metadata(args): check=True, ) logger.trace(result.stdout) - return None # Kid3 writes in-place + return False, "nooutputneeded" # Kid3 writes in-place # ───────────────────────────────────────────── # Default → ffmpeg (copy stream) @@ -989,7 +989,7 @@ def cmd_set_metadata(args): out = ffmpeg.output( inp, str(args.output), c="copy", metadata=f"{args.key}={args.value}" ) - return out + return True, out def cmd_apply_chapters(args): @@ -1067,7 +1067,7 @@ def cmd_apply_chapters(args): ] if args.dry_run: logger.debug(f"Dry run: {' '.join(cmd)}") - return "nooutputneeded" + return True, "nooutputneeded" result = subprocess.run( cmd, capture_output=True, @@ -1091,11 +1091,11 @@ def cmd_apply_chapters(args): audio["tracknumber"] = str(args.file_counter + 1) if args.dry_run: logger.debug("Dry run") - return "nooutputneeded" + return True, "nooutputneeded" audio.save() safe_rename(filename, new_path) - return "nooutputneeded" + return True, "nooutputneeded" def cmd_remove_russian_from_db(args_in): @@ -1109,7 +1109,7 @@ def cmd_remove_russian_from_db(args_in): audio_tracks = translate_audio_tracks(get_audio_tracks(file)) except ValueError as e: logger.warning("%s", e) - return "nooutputneeded" + return False, "nooutputneeded" logger.trace(f"File: {file.name}: Audio tracks: {audio_tracks}") remove_tracks = [] @@ -1121,7 +1121,10 @@ def cmd_remove_russian_from_db(args_in): args = args_in args.audio_index = number cmd_remove_audio_track(args) - return "nooutputneeded" + if remove_tracks: + return True, "nooutputneeded" + else: + return False, "nooutputneeded" def cmd_test(args): @@ -2211,23 +2214,24 @@ def main(): args.input = Path(file) if args.override: out_path = file.with_name(f"{file.stem}_override{file.suffix}") - files_move_from.append(out_path) - files_move_to.append(file) else: out_path = file.with_name( f"{file.stem}_{args.command}{file.suffix}" ) args.output = out_path args.file_counter = counter - out = args.func(args) - if out != "nooutputneeded": - outputs.append(out) + return_value, output_str = args.func(args) + if output_str != "nooutputneeded": + outputs.append(output_str) + if args.override and return_value: + files_move_from.append(out_path) + files_move_to.append(file) counter += 1 # ---- SINGLE FILE ---- elif input_path.is_file(): - out = args.func(args) - if out != "nooutputneeded": - outputs.append(out) + return_value,output_str = args.func(args) + if output_str != "nooutputneeded": + outputs.append(output_str) else: raise ValueError(f"Invalid input path: {args.input}")