Skip to content

Commit 850a964

Browse files
committed
add timeout and launch the new correlation is the official
1 parent 03fb475 commit 850a964

File tree

2 files changed

+69
-34
lines changed

2 files changed

+69
-34
lines changed

src/audioCorrelation.py

Lines changed: 37 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import gc
99
import json
1010
import time
11-
11+
from threading import RLock
1212
import sys
1313

1414
'''
@@ -257,42 +257,49 @@ def show2(fs,s1,s2,title=None):
257257
show1(fs,s2,'red')
258258
plt.show()
259259

260+
lock_fallback = RLock()
260261
def second_correlation(in1,in2):
261-
begin = time.time()
262-
fs,s1,s2 = read_normalized(in1,in2)
263-
ls1,ls2,padsize,xmax,ca = corrabs(s1,s2)
264-
ls1 = None
265-
ls2 = None
266-
ca = None
267-
s1 = None
268-
s2 = None
269-
# if show: show1(fs,ca,title='Correlation',v=xmax/fs) Change if we want reports
270-
#sync_text = """
271-
#==============================================================================
272-
#%s needs 'ffmpeg -ss %s' cut to get in sync
273-
#==============================================================================
274-
#"""
275-
if xmax > padsize // 2:
276-
# if show: show2(fs,s1,s2[padsize-xmax:],title='1st=blue;2nd=red=cut(%s;%s)'%(in1,in2))
277-
file,offset = in2,(padsize-xmax)/fs
278-
else:
279-
# if show: show2(fs,s1[xmax:],s2,title='1st=blue=cut;2nd=red (%s;%s)'%(in1,in2))
280-
file,offset = in1,xmax/fs
281-
#print(sync_text%(file,offset))
282-
padsize = None
283-
xmax = None
284-
fs = None
285-
gc.collect()
286-
287-
sys.stderr.write(f"\t\tSecond correlation in old function took {time.time()-begin:.2f} seconds\n\t\tand we obtain: {file} in offset {offset}\n")
288262
try:
289263
begin = time.time()
290-
stdout, stderror, exitCode = tools.launch_cmdExt_with_timeout_reload([tools.software["audio_sync"],in1,in2],5,120)
264+
stdout, stderror, exitCode = tools.launch_cmdExt_with_timeout_reload([tools.software["audio_sync"],in1,in2],5,300)
291265
data = json.loads(stdout.decode("utf-8").strip())
292-
sys.stderr.write(f"\t\tSecond correlation in new function took {time.time()-begin:.2f} seconds\n\t\tand we obtain: {data}\n")
266+
file = data['file']
267+
offset = data['offset_seconds']
268+
if tools.dev:
269+
sys.stderr.write(f"\t\tSecond correlation in new function took {time.time()-begin:.2f} seconds\n\t\tand we obtain: {data}\n")
293270
except Exception as e:
294271
# If audio_sync is not installed, we return the file and offset
295272
sys.stderr.write(f"\t\taudio_sync not working: {e}\n")
273+
274+
with lock_fallback:
275+
begin = time.time()
276+
fs,s1,s2 = read_normalized(in1,in2)
277+
ls1,ls2,padsize,xmax,ca = corrabs(s1,s2)
278+
ls1 = None
279+
ls2 = None
280+
ca = None
281+
s1 = None
282+
s2 = None
283+
# if show: show1(fs,ca,title='Correlation',v=xmax/fs) Change if we want reports
284+
#sync_text = """
285+
#==============================================================================
286+
#%s needs 'ffmpeg -ss %s' cut to get in sync
287+
#==============================================================================
288+
#"""
289+
if xmax > padsize // 2:
290+
# if show: show2(fs,s1,s2[padsize-xmax:],title='1st=blue;2nd=red=cut(%s;%s)'%(in1,in2))
291+
file,offset = in2,(padsize-xmax)/fs
292+
else:
293+
# if show: show2(fs,s1[xmax:],s2,title='1st=blue=cut;2nd=red (%s;%s)'%(in1,in2))
294+
file,offset = in1,xmax/fs
295+
#print(sync_text%(file,offset))
296+
padsize = None
297+
xmax = None
298+
fs = None
299+
gc.collect()
300+
301+
if tools.dev:
302+
sys.stderr.write(f"\t\tSecond correlation in old function took {time.time()-begin:.2f} seconds\n\t\tand we obtain: {file} in offset {offset}\n")
296303

297304
return file,offset
298305

src/mergeVideo.py

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -148,17 +148,45 @@ def get_delay_fidelity(video_obj_1,video_obj_2,lenghtTime,ignore_audio_couple=se
148148
gc.collect()
149149
return delay_Fidelity_Values
150150

151+
class get_delay_second_method_thread(Thread):
152+
def __init__(self, video_obj_1_tmp_file,video_obj_2_tmp_file):
153+
Thread.__init__(self)
154+
self.video_obj_1_tmp_file = video_obj_1_tmp_file
155+
self.video_obj_2_tmp_file = video_obj_2_tmp_file
156+
self.delay_values = None
157+
158+
def run(self):
159+
result = second_correlation(self.video_obj_1_tmp_file,self.video_obj_2_tmp_file)
160+
if result[0] == self.video_obj_1_tmp_file:
161+
self.delay_values = result
162+
elif result[0] == self.video_obj_2_tmp_file:
163+
self.delay_values = result
164+
else:
165+
self.delay_values = result
166+
151167
def get_delay_by_second_method(video_obj_1,video_obj_2,ignore_audio_couple=set()):
152168
delay_Values = {}
169+
delay_value_jobs = []
170+
153171
video_obj_1.wait_end_ffmpeg_progress_audio()
154172
video_obj_2.wait_end_ffmpeg_progress_audio()
155173
for i in range(0,len(video_obj_1.tmpFiles['audio'])):
156174
for j in range(0,len(video_obj_2.tmpFiles['audio'])):
157175
if f"{i}-{j}" not in ignore_audio_couple:
158-
delay_between_two_audio = []
159-
delay_Values[f"{i}-{j}"] = delay_between_two_audio
176+
delay_value_jobs_between_audio = []
177+
delay_value_jobs.append([f"{i}-{j}",delay_value_jobs_between_audio])
160178
for h in range(0,video.number_cut):
161-
delay_between_two_audio.append(second_correlation(video_obj_1.tmpFiles['audio'][i][h],video_obj_2.tmpFiles['audio'][j][h]))
179+
delay_value_jobs_between_audio.append(get_delay_second_method_thread(video_obj_1.tmpFiles['audio'][i][h],video_obj_2.tmpFiles['audio'][j][h]))
180+
delay_value_jobs_between_audio[-1].start()
181+
182+
for delay_value_job in delay_value_jobs:
183+
delay_between_two_audio = []
184+
delay_Values[delay_value_job[0]] = delay_between_two_audio
185+
for delay_value_job_between_audio in delay_value_job[1]:
186+
delay_value_job_between_audio.join()
187+
delay_between_two_audio.append(delay_value_job_between_audio.delay_values)
188+
189+
gc.collect()
162190
return delay_Values
163191

164192
class compare_video(Thread):
@@ -1460,7 +1488,7 @@ def generate_new_file(video_obj,delay_to_put,ffmpeg_cmd_dict,md5_audio_already_a
14601488
tmp_file_audio = path.join(tools.tmpFolder,f"{video_obj.fileBaseName}_tmp.mkv")
14611489
base_cmd.extend(["-strict", "-2", "-t", duration_best_video, "-max_muxing_queue_size", "8192", tmp_file_audio])
14621490

1463-
ffmpeg_cmd_dict['convert_process'].append(video.ffmpeg_pool_audio_convert.apply_async(tools.launch_cmdExt, (base_cmd,)))
1491+
ffmpeg_cmd_dict['convert_process'].append(video.ffmpeg_pool_audio_convert.apply_async(tools.launch_cmdExt_with_timeout_reload, (base_cmd,5,360)))
14641492
ffmpeg_cmd_dict['merge_cmd'].extend(["--no-global-tags", "-M", "-B", tmp_file_audio])
14651493

14661494
return number_track

0 commit comments

Comments
 (0)