From 150e4bdb2b7c23a8229c2b6e6901387f218d9a73 Mon Sep 17 00:00:00 2001 From: MickSlash Date: Sun, 22 Jan 2023 13:08:51 +0000 Subject: [PATCH] Carica file su 'ffmpegHLS.py' --- ffmpegHLS.py/ffmpeg_2.0.py | 143 +++++++++++++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 ffmpegHLS.py/ffmpeg_2.0.py diff --git a/ffmpegHLS.py/ffmpeg_2.0.py b/ffmpegHLS.py/ffmpeg_2.0.py new file mode 100644 index 0000000..7444a27 --- /dev/null +++ b/ffmpegHLS.py/ffmpeg_2.0.py @@ -0,0 +1,143 @@ +import sys +import pyfiglet +import pyfiglet.fonts +from rich.console import Console +from rich.table import Table +import os +import ffmpeg +import time +# import pkg_resources +# from pyimod03_importers import FrozenImporter + +# if getattr(sys, 'frozen', False): +# pkg_resources.register_loader_type(FrozenImporter, pkg_resources.DefaultProvider) + +console = Console() + +class ConvertMultipleVideo(): + def __init__(self): + self.files = [] + self.convert_files_folder = "" + self.bitrate = "" + self.files_converted = 0 + self.files_trovati = [] + self.estensione_da_trovare = "" + self.estensione_da_convertire = "" + self.selected_profile_converter = "" + self.save_folder = "" + self.bitrate_list = {1:{"bitrate":"uguale","h265":"no","input_args":{"hwaccel": "nvdec","vcodec": "h264_cuvid","c:v": "h264_cuvid"},"output_args":{"vcodec": "h264_nvenc","c:v": "h264_nvenc","acodec": "aac","ab":"320k","max_muxing_queue_size":"9999"}} + ,2:{"bitrate":"uguale","h265":"si","input_args":{"c:v": "hevc"},"output_args":{"vcodec": "h264_nvenc","c:v": "h264_nvenc","acodec": "aac","ab":"320k","pix_fmt":"yuv420p","max_muxing_queue_size":"9999"}} + ,3:{"bitrate":"Scelta Utente","h265":"no","input_args":{"hwaccel": "nvdec","vcodec": "h264_cuvid","c:v": "h264_cuvid"},"output_args":{"vcodec": "h264_nvenc","c:v": "h264_nvenc","preset": "slow","crf": 23,"acodec": "aac","ab":"320k","tune":"film","b:v":"","max_muxing_queue_size":"9999"}} + ,4:{"bitrate":"Scelta Utente","h265":"si","input_args":{"c:v": "hevc"},"output_args":{"vcodec": "h264_nvenc","c:v": "h264_nvenc","preset": "slow","crf": 23,"acodec": "aac","ab":"320k","tune":"film","b:v":"","pix_fmt":"yuv420p","max_muxing_queue_size":"9999"}} + ,5:{"bitrate":"No NVENC (No GPU)","h265":"no","input_args":{},"output_args":{"vcodec":"copy","acodec": "aac","ab":"320k","strict":"2"}, + },6:{"bitrate":"uguale (HLS)","h265":"no","input_args":{},"output_args":{"vcodec":"copy","acodec": "aac","start_number": 0,"hls_time":10,"hls_list_size":0,"f":"hls"}, + } + } + + @staticmethod + def startupMessage(): + ascii_art = pyfiglet.figlet_format("# FFMPEG Video Converter #") + console.print(f"[bold green]{ascii_art}[/bold green]") + + + def cartella_save_file(self): + self.save_folder = console.input("[bold purple]Inserisci la cartella dove salvare i file [Premi ENTER o INVIO per usare la stessa cartella dei file] --> [/bold purple]") + if self.save_folder == "": + self.save_folder = self.convert_files_folder + if os.path.isdir(self.save_folder): + console.print(f"\nOk i file verranno salvati su {self.save_folder}",style="bold green") + else: + console.print("\n❌ La cartella non esiste! ❌ \nVerrá creata...",style="bold red") + time.sleep(0.3) + os.makedirs(self.save_folder) + console.print(f"\n✅ Cartella {self.save_folder} creata ✅...",style="bold green") + + + def convertVideo(self): + try: + console.input("\n[bold green]FFmpeg Video Converter Pronto. Premi ENTER per iniziare la conversione![/bold green]\n") + except KeyboardInterrupt: + console.print("\nUscita dal programma...",style="bold red") + sys.exit() + try: + input_args = self.bitrate_list[self.selected_profile_converter]["input_args"] + output_args = self.bitrate_list[self.selected_profile_converter]["output_args"] + for files in os.listdir(self.convert_files_folder): + if files.endswith(self.estensione_da_trovare): + video = os.path.splitext(files)[0] + output = os.path.join(self.convert_files_folder, files) + stream = ffmpeg.input(os.path.join(self.convert_files_folder, files), **input_args) + stream = ffmpeg.output(stream, os.path.join(self.save_folder, '') + video + self.estensione_da_convertire, **output_args) + ffmpeg.run(stream) + self.files.append(files) + self.files_converted += 1 + if self.files_converted >1: + console.print(f"\nI files {self.files} sono stati convertiti in {self.estensione_da_convertire} correttamente! ✅",style="bold green") + print() + console.print(f"\nIn totale sono stati convertiti {self.files_converted} elementi",style="bold green") + else: + print() + console.print(f"✅ Il file {files} é stato convertito in {video}{self.estensione_da_convertire} correttamente! ✅\n",style="bold green") + except: + console.print("\nErrore!\n",style="bold red") + sys.exit() + + + def visualizza_codec(self): + console.print("\nSeleziona Il Bitrate...\nPossibili Scelte : \n",style="bold blue") + table = Table(show_header=True,header_style="bold green") + table.add_column("NUMERO SCELTA",style="blue",justify="center") + table.add_column("BITRATE",style="blue") + table.add_column("FILE IN H265",style="blue",justify="center") + for bitrate_id,bitrate_info in self.bitrate_list.items(): + table.add_row(str(bitrate_id),str(bitrate_info["bitrate"]),str(bitrate_info["h265"])) + console.print(table) + + + def seleziona_codec(self): + try: + self.selected_profile_converter = int(console.input("[bold purple]Seleziona il numero scelto --> [/bold purple]")) + if self.selected_profile_converter == 3 or self.selected_profile_converter == 4: + self.bitrate = console.input("\n[bold purple]Seleziona Bitrate [Esempio : 1M 2M ecc...] --> [/bold purple]") + self.bitrate_list[self.selected_profile_converter]["output_args"]["b:v"] = self.bitrate + except: + print() + console.print("\nErrore!\n",style="bold red") + sys.exit() + + def files_da_convertire(self): + self.estensione_da_trovare = console.input("\n[bold purple]Inserisci un'estensione da cercare e convertire [Esempio : .mp4 .mkv ecc...] --> [/bold purple]") + self.estensione_da_convertire = console.input("\n[bold purple]Inserisci un'estensione per convertire i video [Esempio : .mp4 .mkv ecc...] --> [/bold purple]") + for files in os.listdir(self.convert_files_folder): + if files.endswith(self.estensione_da_trovare): + self.files_trovati.append(files) + console.print(f"\nAbbiamo trovato questi File nel formato {self.estensione_da_trovare} : {files}\n",style="bold green") + else: + console.print(f"\nIl file {files} non ha estensione {self.estensione_da_trovare}!",style="red") + if self.files_trovati == []: + console.print("\nNessun File Trovato da Convertire...\n",style="bold red") + sys.exit() + + + + def run(self): + self.cartella_save_file() + self.visualizza_codec() + self.seleziona_codec() + self.files_da_convertire() + self.convertVideo() + + def initialize(self): + self.startupMessage() + try: + self.convert_files_folder = console.input("[bold purple]\nInserisci la cartella dove sono conservati i file --> [/bold purple]") + except KeyboardInterrupt: + print() + console.print("\nUscita dal programma...\n",style="bold red") + sys.exit() + else: + self.run() + + +video = ConvertMultipleVideo() +video.initialize() \ No newline at end of file