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