feat: add video_autoreduce_rename.py for automated renaming
- Adds `video_autoreduce_rename.py`, a companion script to rename video files and directories containing resolution tags. - Automatically replaces higher resolution tags (e.g., 2160p, 1080p) with a specified max height (default: 720p). - Supports debug mode for detailed output. - Prevents overwriting existing files by skipping conflicts. - Complements `video_autoreduce.py` for a streamlined video processing workflow.
This commit is contained in:
parent
218951f035
commit
98f9a57ea1
@ -9,7 +9,8 @@ This repository is structured into several key directories:
|
|||||||
- **scripts/**: Contains individual scripts for various tasks. Currently, it includes:
|
- **scripts/**: Contains individual scripts for various tasks. Currently, it includes:
|
||||||
|
|
||||||
- `video_remove_audio.py`: A script for removing audio from video files.
|
- `video_remove_audio.py`: A script for removing audio from video files.
|
||||||
- `video_autoreduce.py`: A script for automatic video resolution reduction of video files.
|
- `video_autoreduce.py`: A script for automatic resolution reduction of video files.
|
||||||
|
- `video_autoreduce_rename.py`: A script for automated renaming of video files post resolution reduction.
|
||||||
|
|
||||||
- **notes/**: A collection of markdown files containing notes on various topics, including:
|
- **notes/**: A collection of markdown files containing notes on various topics, including:
|
||||||
|
|
||||||
|
|||||||
129
scripts/video_autoreduce_rename.py
Executable file
129
scripts/video_autoreduce_rename.py
Executable file
@ -0,0 +1,129 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# video_autoreduce_rename.py
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import colorama
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
|
||||||
|
colorama.init()
|
||||||
|
|
||||||
|
creset = colorama.Fore.RESET
|
||||||
|
ccyan = colorama.Fore.CYAN
|
||||||
|
cyellow = colorama.Fore.YELLOW
|
||||||
|
cgreen = colorama.Fore.GREEN
|
||||||
|
cred = colorama.Fore.RED
|
||||||
|
|
||||||
|
|
||||||
|
def autorename(input_path, max_height=720, debug=False):
|
||||||
|
'''
|
||||||
|
Rename video files and folders in the specified directory tree that contain a resolution
|
||||||
|
in their name to the specified max_height resolution.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
input_path (str): The path of the directory to search for video files and folders.
|
||||||
|
max_height (int, optional): The maximum height (in pixels) of the video to consider for conversion. Default is 720.
|
||||||
|
debug (bool, optional): If True, print debug messages. Default is False.
|
||||||
|
'''
|
||||||
|
# Define patterns to search for various resolutions
|
||||||
|
resolution_patterns = {
|
||||||
|
2160: r'(4096x2160|3840x2160|2880p|2160p|2160|1440p|4k)',
|
||||||
|
1080: r'(1920x1080|1080p|1080)',
|
||||||
|
720: r'(1280x720|720p|720)',
|
||||||
|
}
|
||||||
|
|
||||||
|
files_to_rename = []
|
||||||
|
dirs_to_rename = []
|
||||||
|
|
||||||
|
for dirpath, dirnames, filenames in os.walk(input_path, topdown=True):
|
||||||
|
# Collect files to rename
|
||||||
|
for filename in filenames:
|
||||||
|
for resolution, pattern in resolution_patterns.items():
|
||||||
|
# Only process resolutions greater than max_height
|
||||||
|
if resolution > max_height and re.search(
|
||||||
|
pattern, filename, re.IGNORECASE):
|
||||||
|
old_file = os.path.join(dirpath, filename)
|
||||||
|
new_filename = re.sub(pattern,
|
||||||
|
f'{max_height}p',
|
||||||
|
filename,
|
||||||
|
flags=re.IGNORECASE)
|
||||||
|
new_file = os.path.join(dirpath, new_filename)
|
||||||
|
if old_file != new_file:
|
||||||
|
files_to_rename.append((old_file, new_file))
|
||||||
|
break
|
||||||
|
|
||||||
|
# Collect directories to rename
|
||||||
|
for dirname in dirnames:
|
||||||
|
for resolution, pattern in resolution_patterns.items():
|
||||||
|
# Only process resolutions greater than max_height
|
||||||
|
if resolution > max_height and re.search(
|
||||||
|
pattern, dirname, re.IGNORECASE):
|
||||||
|
old_dir = os.path.join(dirpath, dirname)
|
||||||
|
new_dirname = re.sub(pattern,
|
||||||
|
f'{max_height}p',
|
||||||
|
dirname,
|
||||||
|
flags=re.IGNORECASE)
|
||||||
|
new_dir = os.path.join(dirpath, new_dirname)
|
||||||
|
if old_dir != new_dir:
|
||||||
|
dirs_to_rename.append((old_dir, new_dir))
|
||||||
|
break
|
||||||
|
|
||||||
|
# Rename files first
|
||||||
|
for old_file, new_file in files_to_rename:
|
||||||
|
if os.path.exists(new_file):
|
||||||
|
print(f"Error: Target filename {new_file} already exists.")
|
||||||
|
continue
|
||||||
|
os.rename(old_file, new_file)
|
||||||
|
if debug:
|
||||||
|
print(f'Renamed file: {old_file} -> {new_file}')
|
||||||
|
|
||||||
|
# Rename directories after
|
||||||
|
for old_dir, new_dir in sorted(dirs_to_rename, key=lambda x: -len(x[0])):
|
||||||
|
if os.path.exists(new_dir):
|
||||||
|
print(f"Error: Target directory name {new_dir} already exists.")
|
||||||
|
continue
|
||||||
|
os.rename(old_dir, new_dir)
|
||||||
|
if debug:
|
||||||
|
print(f'Renamed directory: {old_dir} -> {new_dir}')
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
'''
|
||||||
|
Main function to parse command line arguments and initiate file renamings.
|
||||||
|
'''
|
||||||
|
|
||||||
|
# Create argument parser
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
description=
|
||||||
|
'Rename video files containing resolutions in their filenames to a specified max_height resolution.'
|
||||||
|
)
|
||||||
|
|
||||||
|
# Define command line arguments
|
||||||
|
parser.add_argument(
|
||||||
|
'input_path',
|
||||||
|
nargs='?',
|
||||||
|
default=os.getcwd(),
|
||||||
|
help=
|
||||||
|
'directory path to search for video files (default: current directory)'
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'-mh',
|
||||||
|
'--max-height',
|
||||||
|
type=int,
|
||||||
|
default=720,
|
||||||
|
help='maximum height of videos to be converted (default: 720)')
|
||||||
|
parser.add_argument(
|
||||||
|
'--debug',
|
||||||
|
action='store_true',
|
||||||
|
help='enable debug mode for printing additional messages')
|
||||||
|
|
||||||
|
# Parse command line arguments
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
# Rename videos
|
||||||
|
autorename(args.input_path, args.max_height, args.debug)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
# Execute main function when the script is run directly
|
||||||
|
main()
|
||||||
Loading…
Reference in New Issue
Block a user