TDN-M commited on
Commit
087ad85
·
verified ·
1 Parent(s): d84871f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +61 -23
app.py CHANGED
@@ -1,13 +1,15 @@
1
  import asyncio
2
  import mimetypes
3
  import os
4
-
5
  import gradio as gr
6
  from docx import Document
7
  from audio_processing import async_text_to_speech, text_to_speech
8
  from content_generation import create_content, CONTENT_TYPES
9
  from video_processing import create_video_func
10
- from utils import get_bgm_file # Import get_bgm_file
 
 
11
 
12
  # Danh sách giọng đọc
13
  VOICES = ["alloy", "echo", "fable", "onyx", "nova", "shimmer"]
@@ -170,27 +172,63 @@ def interface():
170
  inputs=[text_input, voice_select],
171
  outputs=[audio_output, download_audio])
172
 
173
- with gr.Tab("Tạo Video"): # Added the colon here
174
- script_input = gr.Textbox(label="Nhập kịch bản cho video")
175
- dataset_path = gr.Textbox(
176
- label="Đường dẫn đến dataset ảnh",
177
- placeholder="Để trống nếu không sử dụng dataset")
178
- use_dataset = gr.Checkbox(label="Sử dụng dataset ảnh")
179
- audio_file = gr.File(label="Chọn file âm thanh", type="filepath")
180
- create_video_button = gr.Button("Tạo Video")
181
- video_output = gr.Video(label="Video tạo ra")
182
- download_video = gr.File(label="Tải xuống file video",
183
- interactive=False)
184
-
185
- create_video_button.click(fn=create_video_func,
186
- inputs=[
187
- script_input, audio_file, dataset_path,
188
- use_dataset
189
- ],
190
- outputs=[video_output, download_video])
191
-
192
- return app
193
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
194
  # Khởi chạy ứng dụng
195
  if __name__ == "__main__":
196
  app = interface()
 
1
  import asyncio
2
  import mimetypes
3
  import os
4
+ import tempfile
5
  import gradio as gr
6
  from docx import Document
7
  from audio_processing import async_text_to_speech, text_to_speech
8
  from content_generation import create_content, CONTENT_TYPES
9
  from video_processing import create_video_func
10
+ from moviepy.editor import AudioFileClip, CompositeAudioClip
11
+ from utils import (combine_videos, find_matching_image, get_pexels_image,split_audio, get_bgm_file)
12
+ from video_processing import create_video
13
 
14
  # Danh sách giọng đọc
15
  VOICES = ["alloy", "echo", "fable", "onyx", "nova", "shimmer"]
 
172
  inputs=[text_input, voice_select],
173
  outputs=[audio_output, download_audio])
174
 
175
+ with gr.Tab("Tạo Video"):
176
+ script_input = gr.Textbox(label="Nhập kịch bản")
177
+ audio_file = gr.File(label="Chọn file âm thanh", type="filepath")
178
+ keywords_output = gr.Textbox(label="Từ khóa", interactive=True)
179
+ max_clip_duration = gr.Slider(minimum=2, maximum=5, step=1, label="Thời lượng tối đa mỗi video (giây)")
180
+ join_order = gr.Checkbox(label="Ghép ngẫu nhiên", value=True) # Mặc định là ghép ngẫu nhiên
181
+ bgm_files = gr.Dropdown(choices=get_bgm_file_list(), label="Chọn nhạc nền") # Hàm get_bgm_file_list() cần được định nghĩa
182
+ create_video_button = gr.Button("Tạo Video")
183
+ video_output = gr.Video(label="Video tạo ra")
184
+
185
+ def create_video_func(script,
186
+ audio_file,
187
+ keywords,
188
+ max_clip_duration,
189
+ join_order,
190
+ bgm_file):
191
+ """
192
+ Tạo video từ các thông tin đầu vào.
193
+ """
194
+ try:
195
+ # 1. Tính toán thời lượng video
196
+ audio_clip = AudioFileClip(audio_file)
197
+ video_duration = audio_clip.duration
198
+
199
+ # 2. Tìm kiếm và tải video từ Pexels
200
+ video_paths = []
201
+ for keyword in keywords:
202
+ for _ in range(
203
+ int(video_duration //
204
+ max_clip_duration)): # Chia thời lượng video cho thời lượng tối đa mỗi clip
205
+ image_url = get_pexels_image(keyword)
206
+ if image_url:
207
+ video_path = download_video_from_pexels(
208
+ image_url) # Cần định nghĩa hàm download_video_from_pexels
209
+ video_paths.append(video_path)
210
+
211
+ # 3. Ghép video
212
+ temp_dir = tempfile.mkdtemp()
213
+ if join_order: # Ghép ngẫu nhiên
214
+ random.shuffle(video_paths)
215
+ combined_video_path = os.path.join(temp_dir, "combined_video.mp4")
216
+ combine_videos(combined_video_path, video_paths, audio_file,
217
+ max_clip_duration)
218
+
219
+ # 4. Gộp audio và nhạc nền
220
+ final_video_path = "final_video.mp4"
221
+ bgm_clip = AudioFileClip(bgm_file)
222
+ final_audio = CompositeAudioClip([audio_clip, bgm_clip])
223
+ final_video = VideoFileClip(combined_video_path).set_audio(final_audio)
224
+ final_video.write_videofile(final_video_path)
225
+
226
+ return final_video_path
227
+ except Exception as e:
228
+ print(f"Lỗi khi tạo video: {e}")
229
+ return None
230
+ return app
231
+
232
  # Khởi chạy ứng dụng
233
  if __name__ == "__main__":
234
  app = interface()