Hello and welcome back, it has been a day since the last post and today we will continue to edit our video application project. After I have included the final feature for this project I can now concentrate on the user interface part. Mine ideology is always to focus on the main objective first before working on the small details when it comes to programming, as long as we have destroyed the main battleship then it will easy to take on those small battleships that have lost their main supply line.
In this article, we will create the below user interface which consists of a button to select the video file, a checkbox to remove the audio and another checkbox for adding new audio.
Below is the entire program.
from tkinter import * from tkinter import filedialog import os import subprocess import tkinter.ttk as tk win = Tk() # Create instance win.title("NeWw 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() buttonFrame = Frame(win) # create a button frame buttonFrame.pack(side = BOTTOM, fill=X) # Create a label #aLabel = Label(win, text="Select video size and video", anchor="center", padx=13, pady=10, relief=RAISED) #aLabel.grid(column=0, row=0, sticky=W+E) #aLabel.configure(foreground="black") #aLabel.configure(background="white") #aLabel.configure(wraplength=110) # 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.grid(column=0, row=1) # the position of combo box preferSize.current(0) # select item one preferSize.pack(side = LEFT, expand = TRUE) 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 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)) os.chdir(dir_path) f = new_size + '.mp4' # the new output file name/format f2 = f + '.mp4' # webm video noAudio = removeAudioVal.get() # get the checkbox state for audio #subprocess.call(['ffmpeg', '-stream_loop', '2', '-i', fullfilename, '-vf', 'scale=' + new_size + ':-1', '-y', f]) # resize and loop the video with ffmpeg #subprocess.call(['ffmpeg', '-i', fullfilename, '-vf', 'scale=' + new_size + ':-1', '-y', '-r', '24', f]) # resize and speed up 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 subprocess.call(['ffmpeg', '-i', fullfilename, '-vf', 'scale=' + new_size + ':-1', '-y', f]) # resize the video with ffmpeg if(noAudio == 1): subprocess.call(['ffmpeg', '-i', f, '-c', 'copy', '-y', '-an', f2]) # remove audio from the original video if(audiofilename != '' and noAudio == 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=1.3:brightness=-0.03:saturation=0.01', '-y', f2]) # adjust the saturation contrast and brightness of video #subprocess.call(['ffmpeg', '-i', f, '-y', f2]) # converting the video with ffmpeg action_vid = tk.Button(buttonFrame, text="Open Video", command=openVideo) action_vid.pack(fill=X) win.mainloop()
Not bad for now, we will continue to modify the user interface in the next chapter. Below is the new video which this program has created.
from Planet Python
via read more
No comments:
Post a Comment