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