клавиша ожидания cv2 (в надежде сделать ее переменной в зависимости от задержки)

#python-3.x #cv2

#python-3.x #cv2

Вопрос:

При использовании моего кода ниже (он превращает видео YouTube в ASCII со звуком) Задержка между аудио и видео увеличивается с каждым кадром (я пробовал много разных времен ожидания) Мне было интересно, есть ли способ изменить код, чтобы сделать так, чтобы клавиша ожидания менялась в зависимости от того, сколько времени ожидания существует. Я кодирую всего 6 месяцев, поэтому извините, если есть какой-либо плохой код.

 import pytube
import os
import cv2
import PIL.Image
import winsound
from moviepy.editor import *
from pydub import AudioSegment
import threading
import time



##################################################


# downloads the youtube video and lets you input the path for where it should be saved

url = input ("Enter the you youtube url: nn")

path = input ("Enter the path where you want the youtube video to be saved: nn")


try:
    youtube = pytube.YouTube(url)

    streams = youtube.streams.all()

    video = youtube.streams.get_highest_resolution()
    video.download(path)
    print ("Done!")

except:

    print ("nYoutube video has coppy righted material so it can not be downloaded. Try again with a different video")




##################################################



#locates all the files with the file extension .mp4

for root, dirs, files in os.walk(path):

    for file in files:
        if file.endswith(".mp4"):
            file_name = (file)
            file_path = (os.path.join(root,file))
            
            
            print (file_name)
            print (file_path)


##################################################




mp3_file = (path "\")
mp3_file = (mp3_file "audio.mp3")
mp4_file = (path "\")
mp4_file = (mp4_file file_name)

VideoClip = VideoFileClip(mp4_file)
audioclip = VideoClip.audio
audioclip.write_audiofile(mp3_file)

audioclip.close()

VideoClip.close()

sound = AudioSegment.from_mp3(mp3_file)

sound.export(path "/audio.wav", format = "wav")



##################################################


def a():

    # Ascii characters used to create the output 
    ASCII_CHARS = ["@", "#", "S", "%", "?", "*", " ", ";", ":", ",", "."]

    def resized_gray_image(image ,new_width=80):
        width,height = image.size
        aspect_ratio = height/width
        new_height = int(aspect_ratio * new_width)
        resized_gray_image = image.resize((new_width,new_height)).convert('L')
        return resized_gray_image

    def pix2chars(image):
        pixels = image.getdata()
        
        characters = "".join([ASCII_CHARS[pixel//25] for pixel in pixels])
        return characters

    def generate_frame(image,new_width=80):
        new_image_data = pix2chars(resized_gray_image(image))

        total_pixels = len(new_image_data)

        ascii_image = "n".join([new_image_data[index:(index new_width)] for index in range(0, total_pixels, new_width)])

        sys.stdout.write(ascii_image)
        os.system('cls' if os.name == 'nt' else 'clear')




    cap = cv2.VideoCapture(mp4_file)
    print (cap)
    
    try:    
        while True:


            ret,frame = cap.read()
            cv2.imshow("frame",frame)
          
            generate_frame(PIL.Image.fromarray(frame))
            cv2.waitKey(1)


    except:

        threading.Thread(target=c).start()


##################################################

def b():
    
    winsound.PlaySound(path "/audio.wav",winsound.SND_FILENAME)


##################################################


def c ():


    os.remove (mp3_file)
    os.remove (mp4_file)
    os.remove (path "/audio.wav")


threading.Thread(target=a).start()

threading.Thread(target=b).start()