cloning over all the old files
This commit is contained in:
@@ -0,0 +1,156 @@
|
||||
import os
|
||||
import re
|
||||
import shutil
|
||||
from pymediainfo import MediaInfo # You might need to install this: pip install python-mediainfo
|
||||
|
||||
# Define the network locations
|
||||
LOCATION1 = r"\\truenas\isolation\videos\redmilf_refresh"
|
||||
LOCATION2 = r"\\truenas\isolation\videos\redmilf"
|
||||
FINAL_LOCATION = r"\\truenas\isolation\videos\redmilf_final"
|
||||
|
||||
# Ensure the final destination directory exists
|
||||
os.makedirs(FINAL_LOCATION, exist_ok=True)
|
||||
|
||||
def extract_milf_number(filename):
|
||||
"""
|
||||
Extracts the MILFXXX number from a filename.
|
||||
Returns the number as a string if found, otherwise None.
|
||||
"""
|
||||
match = re.search(r"MILF(\d{3})", filename, re.IGNORECASE)
|
||||
if match:
|
||||
return match.group(1)
|
||||
return None
|
||||
|
||||
def get_file_info(filepath):
|
||||
"""
|
||||
Gets file size and attempts to get codec/bitrate using pymediainfo.
|
||||
Returns a dictionary with 'size', 'codec', 'bitrate'.
|
||||
If mediainfo fails, 'codec' and 'bitrate' will be None.
|
||||
"""
|
||||
try:
|
||||
size = os.path.getsize(filepath)
|
||||
media_info = MediaInfo.parse(filepath)
|
||||
codec = None
|
||||
bitrate = 0 # Use 0 as a default for comparison
|
||||
|
||||
for track in media_info.tracks:
|
||||
if track.track_type == 'Video':
|
||||
if track.format:
|
||||
codec = track.format
|
||||
if track.bit_rate:
|
||||
bitrate = track.bit_rate
|
||||
break # Assuming one video track is sufficient
|
||||
|
||||
return {"size": size, "codec": codec, "bitrate": bitrate}
|
||||
except Exception as e:
|
||||
print(f"Warning: Could not get media info for {filepath}: {e}")
|
||||
return {"size": os.path.getsize(filepath), "codec": None, "bitrate": 0}
|
||||
|
||||
def determine_better_file(file1_info, file2_info, path1, path2):
|
||||
"""
|
||||
Compares two file infos to determine which one is 'better'.
|
||||
Prioritizes bitrate (quality), then size if bitrate is similar or unavailable.
|
||||
"""
|
||||
print(f"\nComparing:")
|
||||
print(f" File 1: {os.path.basename(path1)} (Size: {file1_info['size']} bytes, Codec: {file1_info['codec']}, Bitrate: {file1_info['bitrate']} bps)")
|
||||
print(f" File 2: {os.path.basename(path2)} (Size: {file2_info['size']} bytes, Codec: {file2_info['codec']}, Bitrate: {file2_info['bitrate']} bps)")
|
||||
|
||||
# Prioritize bitrate for quality
|
||||
if file1_info['bitrate'] > file2_info['bitrate']:
|
||||
return path1
|
||||
elif file2_info['bitrate'] > file1_info['bitrate']:
|
||||
return path2
|
||||
else:
|
||||
# If bitrates are similar or unavailable, use size as a proxy
|
||||
if file1_info['size'] >= file2_info['size']: # Greater or equal size usually means better quality
|
||||
return path1
|
||||
else:
|
||||
return path2
|
||||
|
||||
def main():
|
||||
files_in_loc1 = {}
|
||||
files_in_loc2 = {}
|
||||
|
||||
# Objective 1: Identify files with the same naming convention
|
||||
# Scan Location 1
|
||||
for root, _, files in os.walk(LOCATION1):
|
||||
for file in files:
|
||||
milf_num = extract_milf_number(file)
|
||||
if milf_num:
|
||||
if milf_num not in files_in_loc1:
|
||||
files_in_loc1[milf_num] = []
|
||||
files_in_loc1[milf_num].append(os.path.join(root, file))
|
||||
|
||||
# Scan Location 2
|
||||
for root, _, files in os.walk(LOCATION2):
|
||||
for file in files:
|
||||
milf_num = extract_milf_number(file)
|
||||
if milf_num:
|
||||
if milf_num not in files_in_loc2:
|
||||
files_in_loc2[milf_num] = []
|
||||
files_in_loc2[milf_num].append(os.path.join(root, file))
|
||||
|
||||
# Process matched files
|
||||
matched_milf_numbers = set(files_in_loc1.keys()).intersection(set(files_in_loc2.keys()))
|
||||
|
||||
if not matched_milf_numbers:
|
||||
print("No matching MILF files found in both locations.")
|
||||
return
|
||||
|
||||
for milf_num in sorted(list(matched_milf_numbers)):
|
||||
# Assuming only one file per MILFXXX number per location for simplicity.
|
||||
# If multiple files with the same MILFXXX number exist in one location,
|
||||
# this script will compare the first one it finds.
|
||||
# For a more robust solution, you might need to handle this by comparing
|
||||
# all permutations or selecting the "best" within each location first.
|
||||
path1 = files_in_loc1[milf_num][0]
|
||||
path2 = files_in_loc2[milf_num][0]
|
||||
|
||||
# Objective 2: Compare size, quality, and codec and list the better file
|
||||
file1_info = get_file_info(path1)
|
||||
file2_info = get_file_info(path2)
|
||||
|
||||
recommended_better_path = determine_better_file(file1_info, file2_info, path1, path2)
|
||||
|
||||
# Objective 3: Prompt the user which one they would like to keep
|
||||
print(f"\nFor MILF{milf_num}:")
|
||||
print(f" Option 1 (from '{os.path.basename(os.path.dirname(path1))}'): {os.path.basename(path1)}")
|
||||
print(f" Option 2 (from '{os.path.basename(os.path.dirname(path2))}'): {os.path.basename(path2)}")
|
||||
print(f" Recommended: {os.path.basename(recommended_better_path)}")
|
||||
|
||||
while True:
|
||||
choice = input("Which file would you like to keep? (1/2): ").strip()
|
||||
if choice == '1':
|
||||
file_to_keep_path = path1
|
||||
break
|
||||
elif choice == '2':
|
||||
file_to_keep_path = path2
|
||||
break
|
||||
else:
|
||||
print("Invalid choice. Please enter '1' or '2'.")
|
||||
|
||||
# Objective 4: Prompt the user for each file, which one's file name will be used for the final copy
|
||||
while True:
|
||||
name_choice = input(f"Which file's name would you like to use for the final copy of MILF{milf_num}? (1/2): ").strip()
|
||||
if name_choice == '1':
|
||||
final_filename = os.path.basename(path1)
|
||||
break
|
||||
elif name_choice == '2':
|
||||
final_filename = os.path.basename(path2)
|
||||
break
|
||||
else:
|
||||
print("Invalid choice. Please enter '1' or '2'.")
|
||||
|
||||
# Objective 5: Copy the selected file to the new location with the chosen name
|
||||
destination_path = os.path.join(FINAL_LOCATION, final_filename)
|
||||
try:
|
||||
print(f"Copying '{os.path.basename(file_to_keep_path)}' to '{destination_path}'...")
|
||||
shutil.copy2(file_to_keep_path, destination_path) # copy2 preserves metadata
|
||||
print("Copy successful!")
|
||||
except Exception as e:
|
||||
print(f"Error copying file {file_to_keep_path} to {destination_path}: {e}")
|
||||
|
||||
print("\nComparison and copying process complete.")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user