# Python project to classify memes import os import subprocess import argparse import time import shutil def main(): parser = argparse.ArgumentParser() parser.add_argument("INPUT", help="folder with input files", type=str) parser.add_argument("OUTPUT", help="folder for output", type=str) parser.add_argument("-n", "--name", action="store_true", help="rename videos") parser.add_argument("-c", "--classify", action="store_true", help="assign a category to videos to move them into corresponding folders") parser.add_argument( "-r", "--reformat", action="store_true", help="automatically convert videos to mp4 using ffmpeg", ) parser.add_argument("-v", "--verbose", action="store_true") args = parser.parse_args() inputFolder: str = args.INPUT if not inputFolder.endswith("/"): inputFolder = inputFolder + "/" outputFolder: str = args.OUTPUT if not outputFolder.endswith("/"): outputFolder = outputFolder + "/" if not os.path.isdir(inputFolder): print(f"\033[91mERROR: {inputFolder} does not exist") exit(1) if not os.path.isdir(outputFolder): query = input(f"{outputFolder} does not exist. Do you want to create it? [Y/n]") yes: tuple(str) = "yes", "y", "" no: tuple(str) = "no", "n" if query.lower() in yes: if args.verbose: print(f"Creating folder {outputFolder}") os.mkdir(outputFolder) elif query.lower() in no: print("\033[91mNo output folder, aborting...") exit(1) files: [str] = os.listdir(inputFolder) for index, file in enumerate(files): if os.path.isdir(inputFolder + file): files.pop(index) if args.verbose: for file in files: print(file) time.sleep(0.0001) print(f"\nFound {len(files)} files to process") for id, file in enumerate(files): print(f"Processing file {id + 1}/{len(files)}") subprocess.run(["mpv", f"{inputFolder}{file}"]) if args.name: print(f"Old name: {file}") extension: str = file.rpartition(".")[-1] or "" if extension != "": extension = "." + extension newname = input("Enter new name: ") else: newname = file if args.classify: print(f"Existing categories: {os.listdir(outputFolder)}") category: str = input("Enter category or delete to permanently delete file: ") if category == "delete": os.remove(inputFolder + file) elif not os.path.exists(outputFolder + category) or not os.path.isdir( outputFolder + category ): os.mkdir(outputFolder + category) else: category: str = "" path: str = outputFolder + category + "/" + newname + extension if os.path.exists(path): newname = input("Name already in use, please enter another name: ") path = outputFolder + category + "/" + newname + extension shutil.move(inputFolder + file, path) if args.reformat: if extension != ".mp4": subprocess.run( ["ffmpeg"], ["-i"], [path], ["-o"], ["mp4"], [f"{outputFolder}{category}{newname}.mp4"], ) if args.verbose: print(f"converted {newname} from {extension} to .mp4") if __name__ == "__main__": main()