deepsync commited on
Commit
414c758
·
verified ·
1 Parent(s): 9ca8a16

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +51 -0
app.py CHANGED
@@ -56,6 +56,51 @@ def perform_generation(video_id, gen_choice, progress_bar=gr.Progress(track_tqdm
56
  return "Done"
57
 
58
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
  def check_details(video_id):
60
  data = fetch_data_from_db(video_id)
61
  segments = data["targetTranscriptData"]
@@ -64,6 +109,7 @@ def check_details(video_id):
64
 
65
 
66
  with gr.Blocks() as demo:
 
67
  video_id_txt = gr.Text(label="Video ID")
68
  gen_choice_radio = gr.Radio(["Generate only non-generated segments", "Re-generate generated only segments", "Generate all the segments"], label="Audio generation style", value="Generate only non-generated segments")
69
  check_settings_btn = gr.Button("Check settings")
@@ -72,6 +118,11 @@ with gr.Blocks() as demo:
72
 
73
  check_settings_btn.click(check_details, video_id_txt, [logs_txt, generate_btn])
74
  generate_btn.click(perform_generation, [video_id_txt, gen_choice_radio], logs_txt)
 
 
 
 
75
 
 
76
  if __name__=="__main__":
77
  demo.queue().launch(auth=(os.environ.get("GRADIO_USERNAME"), os.environ.get("GRADIO_PASSWORD")))
 
56
  return "Done"
57
 
58
 
59
+ async def update_tempo(session, video_id, segment_id, tempo):
60
+ payload = {"type": "EDIT_SPEED", "tempo": tempo}
61
+ headers = {"Authorization": os.environ.get("DUBPRO_API_HEADER_KEY")}
62
+ API_URL = f"{API_BASE_URL}/video-service/videos/{video_id}/segment/{segment_id}"
63
+
64
+ async with session.put(API_URL, headers=headers, json=payload) as response:
65
+ if response.status != 200:
66
+ print(await response.text())
67
+
68
+
69
+ async def process_segment(session, video_id, segment, progress_bar):
70
+ duration = round(segment["endTimestamp"] - segment["startTimestamp"], 3)
71
+ if WARNING_BOUNDARY <= abs(duration - segment["audioDuration"]) <= (WARNING_BOUNDARY + 2.5):
72
+ if duration - segment["audioDuration"] > 0:
73
+ # Gap case
74
+ tempo = round(segment["audioDuration"] / duration, 3)
75
+ else:
76
+ tempo = round(segment["audioDuration"] / (duration + 0.1), 3)
77
+ await update_tempo(session, video_id, segment["id"], tempo)
78
+ progress_bar.update(1)
79
+
80
+
81
+ async def update_tempos(video_id, segments=[]):
82
+ async with aiohttp.ClientSession() as session:
83
+ progress_bar = tqdm(total=len(segments), desc="Processing Segments", unit="segment")
84
+
85
+ tasks = [
86
+ process_segment(session, video_id, segment, progress_bar)
87
+ for segment in segments
88
+ ]
89
+ await asyncio.gather(*tasks)
90
+ progress_bar.close()
91
+
92
+
93
+ def perform_tempo_adjustment(video_id, gen_choice, progress_bar=gr.Progress(track_tqdm=True)):
94
+ data = fetch_data_from_db(video_id)
95
+ segments = data["targetTranscriptData"]
96
+ if gen_choice == "Generate only non-generated segments":
97
+ segments = [s for s in segments if s["audioUrl"] is None or "updated" not in s["audioUrl"]]
98
+ elif gen_choice == "Re-generate generated only segments":
99
+ segments = [s for s in segments if s["audioUrl"] is not None and "updated" in s["audioUrl"]]
100
+ asyncio.run(update_tempos(video_id, segments=segments))
101
+ return "Done"
102
+
103
+
104
  def check_details(video_id):
105
  data = fetch_data_from_db(video_id)
106
  segments = data["targetTranscriptData"]
 
109
 
110
 
111
  with gr.Blocks() as demo:
112
+ gr.Markdown("# Generate Audio")
113
  video_id_txt = gr.Text(label="Video ID")
114
  gen_choice_radio = gr.Radio(["Generate only non-generated segments", "Re-generate generated only segments", "Generate all the segments"], label="Audio generation style", value="Generate only non-generated segments")
115
  check_settings_btn = gr.Button("Check settings")
 
118
 
119
  check_settings_btn.click(check_details, video_id_txt, [logs_txt, generate_btn])
120
  generate_btn.click(perform_generation, [video_id_txt, gen_choice_radio], logs_txt)
121
+
122
+ gr.Markdown("## Update Tempo [SAH]")
123
+ update_tempo_btn = gr.Button("Adjust tempo")
124
+ update_tempo_btn.click(perform_tempo_adjustment, [video_id_txt, gen_choice_radio], logs_txt)
125
 
126
+
127
  if __name__=="__main__":
128
  demo.queue().launch(auth=(os.environ.get("GRADIO_USERNAME"), os.environ.get("GRADIO_PASSWORD")))