from moviepy.editor import VideoFileClip, concatenate_videoclips from tkinter.messagebox import askyesno from tkinter import Tk, Entry, Button from requests import get from os import remove

print("[+] Finished importing modules")

def cleanup(files):

   for filename in files:
       remove("{}.mp4".format(filename))

def mergeVideos(fileNames):

   videoFiles = []
   
   for videoFileName in fileNames:
       videoFiles.append(VideoFileClip("{}.mp4".format(videoFileName)))
   mergedVideo = concatenate_videoclips(videoFiles, method="compose")
   mergedVideo.write_videofile("finish.mp4", verbose=False, logger=None)
   cleanup(fileNames)

def downloadVideo(word):

   fileName = "{}.mp4".format(word)
   url = "https://media.signbsl.com/videos/bsl/signstation/{}".format(fileName)
   response = get(url, stream=True)
   if(response.status_code == 200):
       with open(fileName, "wb") as wordFile:
           for chunk in response.iter_content(chunk_size=1024*1024):
               if(chunk):
                   wordFile.write(chunk)
       return(True)
   return(False)

def isVideoAvailable(word):

   fileName = "{}.mp4".format(word)
   url = "https://media.signbsl.com/videos/bsl/signstation/{}".format(fileName)
   response = get(url)
   if(response.status_code == 200):
       return(True)
   print("[-] {} not available".format(word))
   return(False)

def parseWords(words):

   wordList = words.split()
   availableWords = []
   if(len(wordList) > 1):
       for word in wordList:
           if(isVideoAvailable(word)):
               availableWords.append(word)
       print(availableWords)
       if(len(availableWords) > 0):
           output = ""
           
           for word in availableWords:
               output += " {}".format(word)
           confirm = askyesno(title="Confirmation", message="{}?".format(output))
           if(confirm):
               print("[/] Downloading videos...")
               for word in availableWords:
                   downloadVideo(word)
               print("[+] Downloaded videos!")
               print("[/] Merging videos...")
               mergeVideos(availableWords)
               print("[+] Merged videos!")
           else:
               print("[+] Exiting request")
               return(False)
           return(True)
       else:
           return(False)
   else:
       if(isVideoAvailable(words)):
           downloadVideo(words)
           return(True)
       
       return(False)

def processText():

   words = textEntry.get()
   if(words):
       print("[/] Processing text...")
       if(parseWords(words)):
           print("[+] Successfully processed into video!")

print("[+] Finished functions")

window = Tk() window.title("Text to Sign") window.geometry("200x200") window.resizable(False, False)

textEntry = Entry(window) textEntry.pack()

processButton = Button(window, text="Process Text", command=processText) processButton.pack()

window.mainloop()