Skip to content

Commit c2b1f9b

Browse files
author
antonxy
committed
Shift audio to correct in camera audio misalignment
1 parent d4c040c commit c2b1f9b

File tree

3 files changed

+24
-9
lines changed

3 files changed

+24
-9
lines changed

console.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ def main():
99
parser.add_argument('ad', help='Audio directory')
1010
parser.add_argument('edl', help='EDL output directory')
1111
parser.add_argument('fps', help='Project frames per second')
12+
parser.add_argument('--audio_shift', help='Shift audio X frames forward')
1213
args = parser.parse_args()
1314

1415
audio_ret = analyse_directory(args.ad)
@@ -21,8 +22,9 @@ def main():
2122
program_logic.rename_files(video_ret, 'v')
2223

2324
fps = float(args.fps)
25+
audio_shift = int(args.audio_shift)
2426

25-
program_logic.generate_edls(video_ret, audio_ret, fps, args.edl)
27+
program_logic.generate_edls(video_ret, audio_ret, fps, args.edl, audio_shift)
2628

2729

2830
def analyse_directory(directory):

gui.py

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ def __init__(self, parent):
2121
self.audio_progress_var = tk.IntVar()
2222
self.video_progress_var = tk.IntVar()
2323
self.fps_var = tk.StringVar()
24+
self.audio_shift_var = tk.StringVar()
2425
self.start_button = None
2526

2627
self.generate_ui()
@@ -41,6 +42,12 @@ def generate_ui(self):
4142
tk.Label(fps_frame, text='FPS:').pack(side=tk.LEFT)
4243
tk.Entry(fps_frame, textvariable=self.fps_var).pack(side=tk.LEFT)
4344

45+
audio_shift_frame = tk.Frame(self)
46+
audio_shift_frame.pack()
47+
tk.Label(audio_shift_frame, text='Shift Audio forward').pack(side=tk.LEFT)
48+
tk.Entry(audio_shift_frame, textvariable=self.audio_shift_var).pack(side=tk.LEFT)
49+
tk.Label(audio_shift_frame, text='frames').pack(side=tk.LEFT)
50+
4451
cmd_frame = tk.Frame(self)
4552
cmd_frame.pack(fill=tk.X)
4653
self.start_button = tk.Button(cmd_frame, text='Start', command=self.execute)
@@ -53,7 +60,7 @@ def generate_ui(self):
5360

5461
def center_window(self):
5562
w = 500
56-
h = 120
63+
h = 140
5764

5865
sw = self.parent.winfo_screenwidth()
5966
sh = self.parent.winfo_screenheight()
@@ -91,21 +98,27 @@ def execute(self):
9198
messagebox.showerror(title='audiosync', message='FPS has to be decimal number')
9299
return
93100

101+
try:
102+
audio_shift = int(self.audio_shift_var.get())
103+
except ValueError:
104+
messagebox.showerror(title='audiosync', message='Audio shift has to be integer')
105+
return
106+
94107
thread = Thread(target=self.thread_target,
95-
args=(self.audio_progress_var, self.video_progress_var, self.start_button, fps, directory))
108+
args=(self.audio_progress_var, self.video_progress_var, self.start_button, fps, directory, audio_shift))
96109
thread.start()
97110
self.start_button.config(state='disabled')
98111

99112

100113
@staticmethod
101-
def thread_target(audio_progress_var, video_progress_var, start_button, fps, directory):
114+
def thread_target(audio_progress_var, video_progress_var, start_button, fps, directory, audio_shift):
102115
video_ret = analyse_directory(os.path.join(directory, 'video'), video_progress_var)
103116
audio_ret = analyse_directory(os.path.join(directory, 'audio'), audio_progress_var)
104117

105118
program_logic.rename_files(audio_ret, 'a')
106119
program_logic.rename_files(video_ret, 'v')
107120

108-
program_logic.generate_edls(video_ret, audio_ret, fps, os.path.join(directory, 'edl'))
121+
program_logic.generate_edls(video_ret, audio_ret, fps, os.path.join(directory, 'edl'), audio_shift)
109122

110123
audio_progress_var.set(0)
111124
video_progress_var.set(0)

program_logic.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,11 @@ def rename_files(file_list, suffix):
2929
'%i-%i-%i_%s%s' % (sst[0], sst[1], sst[2], suffix, file_ext)))
3030

3131

32-
def generate_edls(videos, audios, fps, edl_dir):
32+
def generate_edls(videos, audios, fps, edl_dir, audio_shift=0):
3333
for v in videos:
3434
for a in audios:
3535
if v['sst'] == a['sst']:
36-
generate_edl(v, a, fps, edl_dir)
36+
generate_edl(v, a, fps, edl_dir, audio_shift)
3737

3838

3939
def generate_tc(seconds, fps):
@@ -49,7 +49,7 @@ def generate_tc(seconds, fps):
4949
return '{:02d}:{:02d}:{:02d}:{:02d}'.format(hrs, mins, secs, frames)
5050

5151

52-
def generate_edl(video_data, audio_data, fps, edl_dir):
52+
def generate_edl(video_data, audio_data, fps, edl_dir, audio_shift=0):
5353
sst = video_data['sst']
5454
sst_str = '-'.join(['%s' % e for e in sst])
5555
filename = sst_str + '.edl'
@@ -64,7 +64,7 @@ def generate_edl(video_data, audio_data, fps, edl_dir):
6464
len_sec_a = float(audio_data['length_samples'] / float(audio_data['sample_rate']))
6565
len_sec_v = float(video_data['length_samples'] / float(video_data['sample_rate']))
6666

67-
a_bef_v = sync_sec_a - sync_sec_v
67+
a_bef_v = sync_sec_a - sync_sec_v - (audio_shift / fps)
6868
v_bef_a = -a_bef_v
6969

7070
f.write('TITLE: %s FORMAT: CMX3600\n' % sst_str)

0 commit comments

Comments
 (0)