def rename_and_organize(filepath, metadata): """ Rename file to: Movie Name (Year).ext and move to OUTPUT_DIR. """ base, ext = os.path.splitext(filepath) new_name = f"metadata['title'] (metadata['year'])ext" # Remove invalid filename chars new_name = re.sub(r'[<>:"/\|?*]', '', new_name) dest = os.path.join(OUTPUT_DIR, new_name) os.makedirs(OUTPUT_DIR, exist_ok=True) os.rename(filepath, dest) print(f"✅ Renamed: os.path.basename(filepath) -> new_name") return dest
It looks like you're referencing a filename from a site () for the movie John Wick: Chapter 2 (2017) in BluRay quality. HDMovies4u.Hair-John.Wick.Chapter.2.2017.BluRay...
def clean_title_from_filename(filename): """ Extract title & year from messy filename like: "HDMovies4u.Hair-John.Wick.Chapter.2.2017.BluRay..." Returns: (clean_title, year) """ # Remove common pirate group tags and extensions name = re.sub(r'(HDMovies4u|.Hair|.BluRay|.WEB-DL|.x264|.x265|.AC3|.DTS|.mp4|.mkv|.avi)', '', filename, flags=re.I) # Replace dots/spaces/hyphens name = re.sub(r'[.-_]', ' ', name) # Extract year (19xx or 20xx) year_match = re.search(r'\b(19|20)\d2\b', name) year = year_match.group(0) if year_match else None # Remove year from title if year: name = re.sub(r'\b' + year + r'\b', '', name).strip() # Remove extra spaces and capitalize words name = ' '.join(name.split()) return name, year It does not enable or promote piracy
if == " main ": process_directory() Example Run Input filename: HDMovies4u.Hair-John.Wick.Chapter.2.2017.BluRay.1080p.x264.mkv new_name) dest = os.path.join(OUTPUT_DIR
nfo_path = dest.replace(ext, ".nfo") with open(nfo_path, "w") as nfo: nfo.write(f"""<?xml version="1.0" encoding="utf-8"?> <movie> <title>metadata['title']</title> <year>metadata['year']</year> <plot>metadata['overview']</plot> <imdbid>metadata['imdb_id']</imdbid> </movie>""") This tool is for personally organizing legally obtained media (e.g., own BluRay rips). It does not enable or promote piracy. The filename pattern you shared appears to originate from an unauthorized source — I strongly advise against using such sites, as they violate copyright law and may contain malware.
def process_directory(): for file in os.listdir(INPUT_DIR): if file.lower().endswith(('.mp4', '.mkv', '.avi', '.mov')): raw_title, year = clean_title_from_filename(file) if not raw_title: print(f"⚠️ Could not parse: file") continue print(f"🔍 Parsed: raw_title (year if year else '?')") metadata = fetch_movie_metadata(raw_title, year) if not metadata: print(f"❌ No metadata found for: raw_title") continue full_path = os.path.join(INPUT_DIR, file) rename_and_organize(full_path, metadata) print(f"📝 Overview: metadata['overview'][:100]...\n")