Skip to content

Commit 4096ba2

Browse files
authored
Enhance find_files to support dry_run for video formats
Updated the find_files function to support a dry_run mode that allows searching for multiple video formats. Adjusted file format checks to accommodate dry_run functionality.
1 parent c292441 commit 4096ba2

File tree

1 file changed

+53
-18
lines changed

1 file changed

+53
-18
lines changed

AudioMediaChecker/AudioMediaChecker.py

Lines changed: 53 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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

6783
class 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

Comments
 (0)