-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathgui.py
144 lines (112 loc) · 4.89 KB
/
gui.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
import tkinter as tk
from tkinter.ttk import Progressbar
from tkinter import filedialog, messagebox
import os
import errno
from threading import Thread
import program_logic
def get_paths_in_dir(directory):
filenames = os.listdir(directory)
return [os.path.abspath(os.path.join(directory, name)) for name in filenames]
class MainFrame(tk.Frame):
def __init__(self, parent):
super(MainFrame, self).__init__(parent)
self.parent = parent
self.dir_var = tk.StringVar()
self.audio_progress_var = tk.IntVar()
self.video_progress_var = tk.IntVar()
self.fps_var = tk.StringVar()
self.audio_shift_var = tk.StringVar()
self.start_button = None
self.generate_ui()
self.center_window()
def generate_ui(self):
self.parent.title('audiosync')
dir_frame = tk.Frame(self)
dir_frame.pack(fill=tk.X)
tk.Label(dir_frame, text='Directory:').pack(side=tk.LEFT)
tk.Entry(dir_frame, textvariable=self.dir_var).pack(fill=tk.X, expand=1, side=tk.LEFT)
tk.Button(dir_frame, text='Select', command=self.select_dir).pack(side=tk.LEFT)
tk.Button(dir_frame, text='Create Structure', command=self.create_directory_structure).pack(side=tk.RIGHT)
fps_frame = tk.Frame(self)
fps_frame.pack()
tk.Label(fps_frame, text='FPS:').pack(side=tk.LEFT)
tk.Entry(fps_frame, textvariable=self.fps_var).pack(side=tk.LEFT)
audio_shift_frame = tk.Frame(self)
audio_shift_frame.pack()
tk.Label(audio_shift_frame, text='Shift Audio forward').pack(side=tk.LEFT)
tk.Entry(audio_shift_frame, textvariable=self.audio_shift_var).pack(side=tk.LEFT)
tk.Label(audio_shift_frame, text='frames').pack(side=tk.LEFT)
cmd_frame = tk.Frame(self)
cmd_frame.pack(fill=tk.X)
self.start_button = tk.Button(cmd_frame, text='Start', command=self.execute)
self.start_button.pack()
Progressbar(self, variable=self.video_progress_var).pack(fill=tk.X)
Progressbar(self, variable=self.audio_progress_var).pack(fill=tk.X)
self.pack(fill=tk.BOTH, expand=1)
def center_window(self):
w = 500
h = 140
sw = self.parent.winfo_screenwidth()
sh = self.parent.winfo_screenheight()
x = (sw - w) / 2
y = (sh - h) / 2
self.parent.geometry('%dx%d+%d+%d' % (w, h, x, y))
def select_dir(self):
dir_path = filedialog.askdirectory()
if dir_path != '':
self.dir_var.set(dir_path)
def create_directory_structure(self):
dir_path = self.dir_var.get()
if dir_path != '':
dir_names = ['video', 'audio', 'edl']
for dir_name in dir_names:
new_dir_path = os.path.join(dir_path, dir_name)
try:
os.makedirs(new_dir_path)
except OSError as ex:
if ex.errno != errno.EEXIST:
raise
def execute(self):
directory = self.dir_var.get()
if directory is '':
messagebox.showerror(title='audiosync', message='No directory selected')
return
try:
fps = float(self.fps_var.get())
except ValueError:
messagebox.showerror(title='audiosync', message='FPS has to be decimal number')
return
try:
audio_shift = int(self.audio_shift_var.get())
except ValueError:
messagebox.showerror(title='audiosync', message='Audio shift has to be integer')
return
thread = Thread(target=self.thread_target,
args=(self.audio_progress_var, self.video_progress_var, self.start_button, fps, directory, audio_shift))
thread.start()
self.start_button.config(state='disabled')
@staticmethod
def thread_target(audio_progress_var, video_progress_var, start_button, fps, directory, audio_shift):
video_ret = analyse_directory(os.path.join(directory, 'video'), video_progress_var)
audio_ret = analyse_directory(os.path.join(directory, 'audio'), audio_progress_var)
program_logic.rename_files(audio_ret, 'a')
program_logic.rename_files(video_ret, 'v')
program_logic.generate_edls(video_ret, audio_ret, fps, os.path.join(directory, 'edl'), audio_shift)
audio_progress_var.set(0)
video_progress_var.set(0)
start_button.config(state='normal')
def analyse_directory(directory, progress_var):
ret_list = []
files = os.listdir(directory)
for n, filename in enumerate(files):
path = os.path.abspath(os.path.join(directory, filename))
result = program_logic.analyse_file(path)
if result is not None:
ret_list.append(result)
progress_var.set(int((n + 1) / len(files) * 100))
return ret_list
if __name__ == '__main__':
root = tk.Tk()
app = MainFrame(root)
root.mainloop()