#!/usr/bin/env python3 import sys import os import subprocess import re #from subprocess import PIPE, CalledProcessError, check_call, Popen from subprocess import check_output, STDOUT, CalledProcessError, Popen, PIPE import pexpect import time import progressbar import datetime sourcedir = "/home/neodarz/video_save/ZXAAA Demo ZX Spectrum/Cracktro" outdir = "/home/neodarz/video_save/ZXAAA Demo ZX Spectrum_mp3/Cracktro" def dirSize(path,ext1,ext2): list_dir = [] list_dir = os.listdir(path) count = 0 for file in list_dir: if file.endswith(ext1): count += 1 if file.endswith(ext2): count += 1 return count total = dirSize(sourcedir, ".mp4", ".mkv") count = 0 for file in sorted(os.listdir(sourcedir)): try: name = file[:file.rfind(".")] if file.endswith(".mp4"): print("Converting : "+name) count += 1 #cmd = ["ffmpeg", "-n", "-i", sourcedir+"/"+name+".mp4", "-c:a", "libmp3lame", outdir+"/"+name+".mp3"]² cmd = "ffmpeg -n -i '"+sourcedir+"/"+name+".mp4' -c:a libmp3lame '"+outdir+"/"+name+".mp3'" thread = pexpect.spawn(cmd) cpl = thread.compile_pattern_list([pexpect.EOF,"frame= *\d+",'(.+)']) while True: i = thread.expect_list(cpl, timeout=None) if i == 0: # EOF break elif i == 1: time_number = thread.match.group(0) print(time_number) thread.close elif i == 2: unknown_line = thread.match.group(0) if re.match(r'.*Duration.*', str(unknown_line)): count = 0 for element in unknown_line.split(): count += 1 if re.match(r"^b'Duration:'$", str(element)): break total = str(unknown_line.split()[count]).split("'")[1].split(',')[0] totalRange = time.strptime(total.split('.')[0],'%H:%M:%S') totalRangeS = datetime.timedelta(hours=totalRange.tm_hour,minutes=totalRange.tm_min,seconds=totalRange.tm_sec).total_seconds() if re.match(r'.*time=.*', str(unknown_line)): #print(str(unknown_line)+total) #print(str(unknown_line).split("=")[2].split()[0]+"/"+total) timeRange = time.strptime(str(unknown_line).split("=")[2].split()[0].split('.')[0],'%H:%M:%S') timeRangeS = datetime.timedelta(hours=timeRange.tm_hour,minutes=timeRange.tm_min,seconds=timeRange.tm_sec).total_seconds() print(str(round(100*timeRangeS/totalRangeS, 1))+"% / 100%", end='\r') #else if print(unknown_line) # for show other type of error thread.close #pass #p = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE) #for line in p.stdout: # print(str(line.rstrip())) #p.stdout.flush() #try: # print(str(count)+"/"+str(total)) #output = check_output(["ffmpeg", "-n", "-i", sourcedir+"/"+name+".mp4", "-c:a", "libmp3lame", outdir+"/"+name+".mp3"], stderr=STDOUT) #except CalledProcessError as e: #except CalledProcessError as e: # print(e.message) # if os.path.getsize(outdir+"/"+name+".mp3") < os.path.getsize(sourcedir+"/"+name+".mp4") and re.search(r'.*[already exists].*', str(e)): # print("\n\nout: "+str(os.path.getsize(outdir+"/"+name+".mp3"))+" < source:"+str(os.path.getsize(sourcedir+"/"+name+".mp4"))) # print("BAD") #sys.exit(1) except KeyboardInterrupt: # Read the comment here => https://stackoverflow.com/a/1112357 ! os.remove(outdir+"/"+name+".mp3") sys.exit()