Our video editing application project is nearly completed so then let us continue to modify it in this post. In this new code edition we will include the repeat scale box which allows the user to select how many times he wishes the video to repeat, the fps scale box which allows the user to select the fps for the new video, besides that we have also included the video format combo box where the user can select which new video format he wishes his new video to have. Below is the entire program.
from tkinter import * from tkinter import filedialog import os import subprocess import tkinter.ttk as tk win = Tk() # Create tk instance win.title("NeW Vid") # Add a title win.resizable(0, 0) # Disable resizing the GUI win.configure(background='white') # change background color mainframe = Frame(win) # create a frame mainframe.pack() eqFrame = Frame(win) # create eq frame eqFrame.pack(side = TOP, fill=X) buttonFrame = Frame(win) # create a button frame buttonFrame.pack(side = BOTTOM, fill=X) # Create a label and scale box for eq contrast_variable = DoubleVar() contrast = Scale(eqFrame, from_=float(-2.00), to=float(2.00), orient=HORIZONTAL, label="CONTRAST", digits=3, resolution=0.01, variable=contrast_variable) contrast.set(1) contrast.pack(side = LEFT) brightness_variable = DoubleVar() brightness = Scale(eqFrame, from_=float(-1.00), to=float(1.00), orient=HORIZONTAL, label="BRIGHTNESS", digits=3, resolution=0.01, variable=brightness_variable) brightness.pack(side = LEFT) saturation_variable = DoubleVar() saturation = Scale(eqFrame, from_=float(0.00), to=float(3.00), orient=HORIZONTAL, label="SATURATION", digits=3, resolution=0.01, variable=saturation_variable) saturation.set(1) saturation.pack(side = LEFT) gamma_variable = DoubleVar() gamma = Scale(eqFrame, from_=float(0.10), to=float(10.00), orient=HORIZONTAL, label="GAMMA", digits=4, resolution=0.01, variable=gamma_variable) gamma.set(1) gamma.pack(side = LEFT) loop_variable = DoubleVar() loop = Scale(eqFrame, from_=float(0), to=float(10), orient=HORIZONTAL, label="REPEAT", digits=2, resolution=1, variable=loop_variable) loop.pack(side = LEFT) fr_variable = DoubleVar() fr = Scale(eqFrame, from_=float(9), to=float(60), orient=HORIZONTAL, label="FPS", digits=2, resolution=1, variable=fr_variable) fr.set(24) fr.pack(side = LEFT) # Create a combo box vid_size = StringVar() # create a string variable preferSize = tk.Combobox(mainframe, textvariable=vid_size) preferSize['values'] = (1920, 1280, 854, 640) # video width in pixels preferSize.current(0) # select item one preferSize.pack(side = LEFT) # Create a combo box vid_format = StringVar() # create a string variable preferFormat = tk.Combobox(mainframe, textvariable=vid_format) preferFormat['values'] = ('.mp4', '.webm', '.avi', '.wmv', '.mpg', '.ogv') # video format preferFormat.current(0) # select item one preferFormat.pack(side = LEFT) removeAudioVal = IntVar() removeAudio = tk.Checkbutton(mainframe, text="Remove Audio", variable=removeAudioVal) removeAudio.pack(side = LEFT, padx=3) newAudio = IntVar() aNewAudio = tk.Checkbutton(mainframe, text="New Audio", variable=newAudio) aNewAudio.pack(side = LEFT, padx=2) # Open a video file def openVideo(): fullfilename = filedialog.askopenfilename(initialdir="/", title="Select a file", filetypes=[("Video file", "*.mp4; *.avi ")]) # select a video file from the hard drive audiofilename = '' if(newAudio.get() == 1): audiofilename = filedialog.askopenfilename(initialdir="/", title="Select a file", filetypes=[("Audio file", "*.wav; *.ogg ")]) # select a new audio file from the hard drive if(fullfilename != ''): scale_vid = preferSize.get() # retrieve value from the comno box new_size = str(scale_vid) dir_path = os.path.dirname(os.path.realpath(fullfilename)) file_extension = fullfilename.split('.')[-1] # extract the video format from the original video os.chdir(dir_path) # change the directory to the original file's directory f = new_size + '.' + file_extension # the new output file name f2 = '0' + f # second video noAudio = removeAudioVal.get() # get the checkbox state for audio subprocess.call(['ffmpeg', '-stream_loop', str(loop_variable.get()), '-i', fullfilename, '-vf', 'scale=' + new_size + ':-1', '-y', '-r', str(fr_variable.get()), f]) # resize, speedup and loop the video with ffmpeg #subprocess.call(['ffmpeg', '-i', f, '-ss', '00:02:30', '-y', f2]) # create animated gif starting from 2 minutes and 30 seconds to the end if(noAudio == 1): subprocess.call(['ffmpeg', '-i', f, '-c', 'copy', '-y', '-an', f2]) # remove audio from the original video if(audiofilename != '' and noAudio == 1 and newAudio.get() == 1): subprocess.call(['ffmpeg', '-i', f2, '-i', audiofilename, '-shortest', '-c:v', 'copy', '-c:a', 'aac', '-b:a', '256k', '-y', f]) # add audio to the original video, trim either the audio or video depends on which one is longer subprocess.call(['ffmpeg', '-i', f, '-vf', 'eq=contrast=' + str(contrast_variable.get()) +':brightness='+ str(brightness_variable.get()) +':saturation=' + str(saturation_variable.get()) +':gamma='+ str(gamma_variable.get()), '-y', f2]) # adjust the saturation, gamma, contrast and brightness of video f3 = f + vid_format.get() # The final video format if(f3.split('.')[-1] != f2.split('.')[-1]): subprocess.call(['ffmpeg', '-i', f2, '-y', f3]) # converting the video with ffmpeg os.remove(f2) # remove two videos os.remove(f) else: os.remove(f) # remove a video action_vid = tk.Button(buttonFrame, text="Open Video", command=openVideo) action_vid.pack(fill=X) win.mainloop()
If you run the above program you will get below outcome.
The above program needs more edits so stay tuned for the next chapter.
from Planet Python
via read more
No comments:
Post a Comment