Added color output

This commit is contained in:
Fabrice Quenneville 2020-11-05 09:07:01 -05:00
parent 28219a27d7
commit 5e0c7056ed
2 changed files with 58 additions and 25 deletions

View File

@ -17,13 +17,19 @@ pip install -r requirements.txt
``` ```
## Usage ## Usage
./converter.py [list,convert] [-in:any,avi,mkv,wmv,mpg,mp4,m4v,flv] [-filters:old,mpeg,mpeg4,x264,wmv3,wmv] [-dir/-file:/mnt/media/] ./curator.py [list,convert] [-in:any,avi,mkv,wmv,mpg,mp4,m4v,flv] [-filters:old,mpeg,mpeg4,x264,wmv3,wmv] [-out:mkv/mp4,x265/av1] [-dir/-file:/mnt/media/]
default options are:
-in:any
-filters:
-out:mkv,x265
```bash ```bash
./converter.py list -in:any -filters:old -dir:/mnt/media/ >> ../medlist.txt ./curator.py list -in:any -filters:old -dir:/mnt/media/ >> ../medlist.txt
./converter.py convert -del -in:any -filters:mpeg4 -out:x265,mkv -dir:"/mnt/media/Movies/" ./curator.py convert -del -in:any -filters:mpeg4 -out:x265,mkv -dir:"/mnt/media/Movies/"
./converter.py convert -del -verbose -in:avi,mpg -dir:/mnt/media/ ./curator.py convert -del -verbose -in:avi,mpg -dir:/mnt/media/
``` ```
## Contributing ## Contributing
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change. Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

View File

@ -22,9 +22,9 @@ from hurry.filesize import size
def main(): def main():
ffmpeg_version = detect_ffmpeg() ffmpeg_version = detect_ffmpeg()
if not ffmpeg_version: if not ffmpeg_version:
print("No ffmpeg version detected") print(f"{bcolors.FAIL}No ffmpeg version detected{bcolors.ENDC}")
exit() exit()
print(f"ffmpeg installed: {ffmpeg_version}") print(f"{bcolors.OKBLUE}ffmpeg installed: {ffmpeg_version}{bcolors.ENDC}")
if len(sys.argv) >= 2: if len(sys.argv) >= 2:
# Get command parameters # Get command parameters
@ -54,7 +54,7 @@ def main():
for video in videolist: for video in videolist:
print(f"{get_codec(video)} - {video}") print(f"{get_codec(video)} - {video}")
else: else:
print("Missing directory: ") print(f"{bcolors.FAIL}Missing directory: {bcolors.ENDC}")
elif sys.argv[1] == "test": elif sys.argv[1] == "test":
if any("-file" in argv for argv in sys.argv): if any("-file" in argv for argv in sys.argv):
pass pass
@ -62,21 +62,34 @@ def main():
print(f"directories = {directories}, inputs = {inputs}, filters = {filters}, outputs = {outputs}") print(f"directories = {directories}, inputs = {inputs}, filters = {filters}, outputs = {outputs}")
exit() exit()
else: else:
print("Missing directory: ") print("{bcolors.FAIL}Missing directory: {bcolors.ENDC}")
elif sys.argv[1] == "convert": elif sys.argv[1] == "convert":
if "av1" in outputs:
codec = "av1"
else:
codec = "x265"
if any("-file" in argv for argv in sys.argv): if any("-file" in argv for argv in sys.argv):
video = sys.argv[sys.argv.index("-file") + 1] video = sys.argv[sys.argv.index("-file") + 1]
folder = str(video)[:str(video).rindex("/") + 1] folder = str(video)[:str(video).rindex("/") + 1]
oldfilename = str(video)[str(video).rindex("/") + 1:] oldfilename = str(video)[str(video).rindex("/") + 1:]
# Setting new filename
if "mp4" in outputs:
newfilename = oldfilename[:-4] + ".mp4"
else:
newfilename = oldfilename[:-4] + ".mkv" newfilename = oldfilename[:-4] + ".mkv"
# Modding the filename if same as original
if oldfilename == newfilename: if oldfilename == newfilename:
newfilename = oldfilename[:-4] + "[HEVC]" newfilename = oldfilename[:-4] + "[HEVC]"
print(f"*********** converting {oldfilename} to {newfilename} ***********")
print(f"{bcolors.OKBLUE}*********** converting {oldfilename} to {newfilename} ({codec}) ***********{bcolors.ENDC}")
try: try:
if convert(folder + oldfilename, folder + newfilename): if convert(folder + oldfilename, folder + newfilename, codec):
subprocess.call(['chmod', '777', folder + newfilename]) subprocess.call(['chmod', '777', folder + newfilename])
if "-del" in sys.argv: if "-del" in sys.argv:
delete(folder + oldfilename) delete(folder + oldfilename)
@ -96,9 +109,9 @@ def main():
newfilename = oldfilename[:-4] + "[HEVC]" newfilename = oldfilename[:-4] + "[HEVC]"
counter += 1 counter += 1
print(f"*********** convert {counter} of {len(videolist)} ***********") print(f"{bcolors.OKBLUE}*********** convert {counter} of {len(videolist)} ***********{bcolors.ENDC}")
try: try:
if convert(folder + oldfilename, folder + newfilename): if convert(folder + oldfilename, folder + newfilename, codec):
if "-del" in sys.argv: if "-del" in sys.argv:
delete(folder + oldfilename) delete(folder + oldfilename)
except: except:
@ -106,7 +119,7 @@ def main():
return False return False
def get_videolist(parentdir, inputs = ["any"], filters = []): def get_videolist(parentdir, inputs = ["any"], filters = []):
print(f"Scanning files in {parentdir} for videos") print(f"{bcolors.OKGREEN}Scanning files in {parentdir} for videos{bcolors.ENDC}")
videolist = [] videolist = []
path = Path(parentdir) path = Path(parentdir)
@ -132,7 +145,7 @@ def get_videolist(parentdir, inputs = ["any"], filters = []):
# Filter the list for specifi codecs # Filter the list for specifi codecs
videolist_tmp = videolist videolist_tmp = videolist
print(f"Filtering {len(videolist)} videos for the requested parameters") print(f"{bcolors.OKGREEN}Filtering {len(videolist)} videos for the requested parameters{bcolors.ENDC}")
if len(filters) > 0: if len(filters) > 0:
videolist = [] videolist = []
@ -151,7 +164,7 @@ def get_videolist(parentdir, inputs = ["any"], filters = []):
if "x264" in filters: if "x264" in filters:
videolist += [video for video in videolist_tmp if get_codec(video) in ["x264"]] videolist += [video for video in videolist_tmp if get_codec(video) in ["x264"]]
print(f"Found {len(videolist)} videos for the requested parameters") print(f"{bcolors.OKGREEN}Found {len(videolist)} videos for the requested parameters{bcolors.ENDC}")
return videolist return videolist
@ -160,18 +173,21 @@ def get_codec(filename):
args = ["ffprobe", "-v", "error", "-select_streams", "v:0", "-show_entries", "stream=codec_name", "-of", "default=noprint_wrappers=1:nokey=1", str(filename)] args = ["ffprobe", "-v", "error", "-select_streams", "v:0", "-show_entries", "stream=codec_name", "-of", "default=noprint_wrappers=1:nokey=1", str(filename)]
output = subprocess.check_output(args, stderr=subprocess.STDOUT) output = subprocess.check_output(args, stderr=subprocess.STDOUT)
except subprocess.CalledProcessError: except subprocess.CalledProcessError:
print(f"There seams to be an error with {filename}") print(f"{bcolors.FAIL}There seams to be an error with {filename}{bcolors.ENDC}")
return False return False
return output.decode().strip() return output.decode().strip()
def convert(oldfilename, newfilename): def convert(oldfilename, newfilename, codec = "x265"):
oldsize = size(Path(oldfilename).stat().st_size) oldsize = size(Path(oldfilename).stat().st_size)
print(f"Starting conversion of {oldfilename}({oldsize}) from {get_codec(oldfilename)} ...") print(f"{bcolors.OKBLUE}Starting conversion of {oldfilename}({oldsize}) from {get_codec(oldfilename)} to {codec}...{bcolors.ENDC}")
# Preparing ffmpeg command and input file # Preparing ffmpeg command and input file
args = ['ffmpeg', '-i', oldfilename] args = ['ffmpeg', '-i', oldfilename]
# conversion options # conversion options
if codec == "av1":
args += ['-c:v', 'libaom-av1', '-strict', 'experimental']
else:
args += ['-c:v', 'libx265'] args += ['-c:v', 'libx265']
args += ['-max_muxing_queue_size', '1000'] args += ['-max_muxing_queue_size', '1000']
@ -185,23 +201,23 @@ def convert(oldfilename, newfilename):
else: else:
txt = subprocess.check_output(args, stderr=subprocess.STDOUT) txt = subprocess.check_output(args, stderr=subprocess.STDOUT)
except subprocess.CalledProcessError as e: except subprocess.CalledProcessError as e:
print(f"Conversion failed {e}") print(f"{bcolors.FAIL}Conversion failed {e}{bcolors.ENDC}")
return False return False
else: else:
newsize = size(Path(newfilename).stat().st_size) newsize = size(Path(newfilename).stat().st_size)
oldfilename = str(oldfilename)[str(oldfilename).rindex("/") + 1:] oldfilename = str(oldfilename)[str(oldfilename).rindex("/") + 1:]
newfilename = str(newfilename)[str(newfilename).rindex("/") + 1:] newfilename = str(newfilename)[str(newfilename).rindex("/") + 1:]
print(f"Converted {oldfilename}({oldsize}) to {newfilename}({newsize}) successfully") print(f"{bcolors.OKGREEN}Converted {oldfilename}({oldsize}) to {newfilename}({newsize}) successfully{bcolors.ENDC}")
return True return True
def delete(filename): def delete(filename):
try: try:
os.remove(filename) os.remove(filename)
except OSError: except OSError:
print(f"Error deleting {filename}") print(f"{bcolors.FAIL}Error deleting {filename}{bcolors.ENDC}")
return False return False
print(f"Deleted {filename}") print(f"{bcolors.OKGREEN}Deleted {filename}{bcolors.ENDC}")
return True return True
def detect_ffmpeg(): def detect_ffmpeg():
@ -211,5 +227,16 @@ def detect_ffmpeg():
except: except:
return False return False
class bcolors:
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKCYAN = '\033[96m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m'
if __name__ == '__main__': if __name__ == '__main__':
main() main()