@@ -36,9 +36,9 @@ def _setup_logger(verbose=False):
3636 logger .setLevel (logging .DEBUG if verbose else logging .INFO )
3737 return logger
3838
39- def find_files (folder_path : Path , max_depth : int , current_level : int = 0 ):
39+ def find_files (folder_path : Path , max_depth : int , current_level : int = 0 , dry_run : bool = False ):
4040 """
41- Search for files with the .mkv extension in 'folder_path' by exploring to the specified depth.
41+ Search for video files in 'folder_path' by exploring to the specified depth.
4242
4343 Arguments:
4444 folder_path (Path): starting directory.
@@ -47,21 +47,37 @@ def find_files(folder_path: Path, max_depth: int, current_level: int = 0):
4747 If > 0, only sub-levels such that current_level < max_depth are explored,
4848 where the starting directory equals level 0.
4949 current_level (int): current level in recursion (not to be set from outside).
50+ dry_run (bool): if True, searches for all video formats; if False, only .mkv files.
5051
5152 Returns:
5253 list[Path]: files found.
5354 """
55+ # I define extensions by mode
56+ if dry_run :
57+ # In dry-run I search for all video formats supported by ffmpeg
58+ extensions = ['*.mkv' , '*.mp4' , '*.avi' , '*.mov' , '*.m4v' , '*.flv' , '*.wmv' , '*.webm' ]
59+ else :
60+ # In normal mode I only search for mkv
61+ extensions = ['*.mkv' ]
62+
5463 # If max_depth is 0, we perform an unlimited recursive search.
5564 if max_depth == 0 :
56- return list (folder_path .rglob ('*.mkv' ))
65+ files = []
66+ for ext in extensions :
67+ files .extend (folder_path .rglob (ext ))
68+ return files
5769
58- files = list (folder_path .glob ('*.mkv' ))
70+ # Searching for files in the current directory for all extensions
71+ files = []
72+ for ext in extensions :
73+ files .extend (folder_path .glob (ext ))
5974
6075 # If we have not reached the maximum level, we explore the subfolders.
6176 if current_level < max_depth :
6277 for subdir in folder_path .iterdir ():
6378 if subdir .is_dir ():
64- files .extend (find_files (subdir , max_depth , current_level + 1 ))
79+ files .extend (find_files (subdir , max_depth , current_level + 1 , dry_run ))
80+
6581 return files
6682
6783class AudioMediaChecker :
@@ -92,7 +108,11 @@ def __init__(self, file_path, check_all_tracks=False, verbose=False, dry_run=Fal
92108 self .gpu = gpu
93109 self .logger = logger if logger else _setup_logger (verbose )
94110
95- if self .file_path .suffix .lower () != '.mkv' :
111+ # if self.file_path.suffix.lower() != '.mkv':
112+ # raise ValueError(f"Formato file non supportato: {self.file_path}")
113+
114+ # In dry-run mode I accept all video formats, otherwise only mkv
115+ if not self .dry_run and self .file_path .suffix .lower () != '.mkv' :
96116 raise ValueError (f"Formato file non supportato: { self .file_path } " )
97117
98118 # Get the multimedia information once and save it.
@@ -339,7 +359,7 @@ def get_tracks_to_analyze(self, audio_streams):
339359
340360 def log_stream_info (self , stream ):
341361 """
342- Logga le informazioni della traccia audio .
362+ Logs the audio track information .
343363 """
344364 bitrate = stream .get ('bit_rate' )
345365 info = {
@@ -437,6 +457,9 @@ def update_language_tag(self, stream_index, language):
437457 self .logger .info (f"No language to set by track { stream_index } " )
438458 return
439459
460+ # I check if the file is an mkv
461+ is_mkv = self .file_path .suffix .lower () == '.mkv'
462+
440463 cmd = [
441464 'mkvpropedit' ,
442465 str (self .file_path ),
@@ -445,13 +468,19 @@ def update_language_tag(self, stream_index, language):
445468 ]
446469
447470 if not self .dry_run :
448- try :
449- result = subprocess .run (cmd , check = True , capture_output = True , text = True )
450- self .logger .info (f"Updated language tag for track { stream_index } : { language } " )
451- except subprocess .CalledProcessError as e :
452- self .logger .error (f"Error running mkvpropedit: { e .stderr } " )
471+ if is_mkv :
472+ try :
473+ result = subprocess .run (cmd , check = True , capture_output = True , text = True )
474+ self .logger .info (f"Updated language tag for track { stream_index } : { language } " )
475+ except subprocess .CalledProcessError as e :
476+ self .logger .error (f"Error running mkvpropedit: { e .stderr } " )
477+ else :
478+ self .logger .info (f"File { self .file_path .name } is not MKV format - language tag update skipped" )
453479 else :
454- self .logger .info (f"[DRY RUN] Update language tag per track { stream_index } : { language } " )
480+ if is_mkv :
481+ self .logger .info (f"[DRY RUN] Update language tag per track { stream_index } : { language } " )
482+ else :
483+ self .logger .info (f"[DRY RUN] File { self .file_path .name } is not MKV format - would not be modified in normal mode" )
455484
456485 def detect_language (self , audio_file ):
457486 """
@@ -606,7 +635,8 @@ def main():
606635
607636 if args .file :
608637 file_path = Path (args .file )
609- if file_path .suffix .lower () != '.mkv' :
638+ # In normal mode I accept only mkv, in dry-run all video formats
639+ if not args .dry_run and file_path .suffix .lower () != '.mkv' :
610640 print (f"Error: the file must be in MKV format. File provided: { file_path } " )
611641 sys .exit (1 )
612642 files_to_process .append (file_path )
@@ -621,11 +651,17 @@ def main():
621651 # and then a NON-recursive search will be done (only in the source directory)
622652 if args .recursive is None :
623653 # In this case we consider only the indicated directory (no recursion)
624- depth = 0 # We can decide to handle it as non-recursive
625- files_to_process .extend (list (folder_path .glob ('*.mkv' )))
654+ if args .dry_run :
655+ # In dry-run I look for all video formats
656+ extensions = ['*.mkv' , '*.mp4' , '*.avi' , '*.mov' , '*.m4v' , '*.flv' , '*.wmv' , '*.webm' ]
657+ for ext in extensions :
658+ files_to_process .extend (list (folder_path .glob (ext )))
659+ else :
660+ # In normal mode I only search for mkv
661+ files_to_process .extend (list (folder_path .glob ('*.mkv' )))
626662 else :
627663 depth = args .recursive
628- files_to_process .extend (find_files (folder_path , depth ))
664+ files_to_process .extend (find_files (folder_path , depth , dry_run = args . dry_run ))
629665
630666 if not files_to_process :
631667 print ("No MKV files found." )
@@ -666,7 +702,6 @@ def main():
666702 checker .process_file ()
667703 pbar .update (1 ) # Update the progress bar after processing the file
668704
669-
670705 logger .info ("Script successfully completed." )
671706 sys .exit (0 )
672707
0 commit comments