TDN-M commited on
Commit
1e763fc
·
verified ·
1 Parent(s): e5e2fcc

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +0 -92
app.py CHANGED
@@ -3,98 +3,6 @@ from PIL import Image, ImageDraw, ImageFont
3
  from moviepy.editor import ImageClip, concatenate_videoclips
4
  import os
5
 
6
- def create_video(word_list):
7
- # Thay vì cố gắng lấy font từ tệp .ttf, ta sẽ dùng font mặc định
8
- font_size = 300 # Tăng kích thước chữ lên 5 lần
9
- try:
10
- # Nếu có tệp font cụ thể, hãy cung cấp nó ở đây
11
- font_path = "path/to/your/font.ttf" # Đường dẫn tới font của bạn (nếu có)
12
- font = ImageFont.truetype(font_path, font_size)
13
- except OSError:
14
- # Nếu không tìm thấy font, sử dụng font mặc định của PIL
15
- print("Không tìm thấy tệp font, đang sử dụng font mặc định.")
16
- font = ImageFont.load_default()
17
-
18
- # Định nghĩa kích thước hình ảnh và màu nền
19
- width, height = 800, 600 # Kích thước hình ảnh
20
- background_color = (255, 255, 255) # Màu nền trắng
21
- text_color = (0, 0, 0) # Màu chữ đen
22
-
23
- # Tạo danh sách các slide (ảnh)
24
- slide_images = []
25
- words = word_list # Sử dụng danh sách từ đã được truyền vào
26
- for word, phonetic in words:
27
- # Tạo một hình ảnh mới với màu nền
28
- img = Image.new("RGB", (width, height), background_color)
29
- draw = ImageDraw.Draw(img)
30
-
31
- # Sử dụng font mặc định nếu không tìm thấy font cụ thể
32
- # font = ImageFont.truetype(font_path, font_size) # Bỏ dòng này nếu không cần font cụ thể
33
-
34
- # Sử dụng textbbox để đo kích thước từ và phiên âm
35
- word_text_bbox = draw.textbbox((0, 0), word, font=font)
36
- phonetic_text_bbox = draw.textbbox((0, 0), phonetic, font=font)
37
-
38
- # Tính toán vị trí để căn giữa từ và phiên âm
39
- word_position = ((width - (word_text_bbox[2] - word_text_bbox[0])) // 2,
40
- (height - (word_text_bbox[3] - word_text_bbox[1])) // 2 - 50)
41
- phonetic_position = ((width - (phonetic_text_bbox[2] - phonetic_text_bbox[0])) // 2,
42
- word_position[1] + (word_text_bbox[3] - word_text_bbox[1]) + 20)
43
-
44
- # Vẽ từ và phiên âm lên hình ảnh
45
- draw.text(word_position, word, font=font, fill=text_color)
46
- draw.text(phonetic_position, phonetic, font=font, fill=text_color)
47
-
48
- # Lưu hình ảnh vào danh sách
49
- slide_images.append(img)
50
-
51
- # Lưu từng hình ảnh vào tạm thời và tạo video
52
- clips = []
53
- for i, img in enumerate(slide_images):
54
- img_path = f"slide_{i}.png"
55
- img.save(img_path)
56
- # Tạo một ImageClip từ ảnh với thời lượng 3 giây
57
- clip = ImageClip(img_path).set_duration(3)
58
- clips.append(clip)
59
-
60
- # Ghép các clip lại thành video
61
- video = concatenate_videoclips(clips, method="compose")
62
- video_path = "output_video.mp4"
63
- video.write_videofile(video_path, fps=24)
64
-
65
- # Trả về đường dẫn tới video đã tạo
66
- return video_path
67
-
68
- # Hàm nhận danh sách từ từ input của Gradio
69
- def process_input(input_text):
70
- # Tách chuỗi input thành các từ và phiên âm, mỗi từ trên 1 dòng
71
- word_list = []
72
- lines = input_text.strip().split("\n")
73
- for line in lines:
74
- if line.strip():
75
- word, phonetic = line.split(",")
76
- word_list.append((word.strip(), phonetic.strip()))
77
-
78
- # Tạo video từ danh sách từ
79
- return create_video(word_list)
80
-
81
- # Tạo giao diện Gradio
82
- description = "Nhập danh sách từ và phiên âm, mỗi dòng gồm từ và phiên âm cách nhau bằng dấu phẩy. Ví dụ: Atmosphere, [ˈætməsfɪə]"
83
- with gr.Blocks() as demo:
84
- gr.Markdown("# Tạo Video từ Danh Sách Từ")
85
- gr.Markdown(description)
86
- input_text = gr.Textbox(label="Danh sách từ", placeholder="Ví dụ:\nAtmosphere, [ˈætməsfɪə]\nBoard, [bɔːd]...")
87
- video_output = gr.Video(label="Video đầu ra")
88
- generate_button = gr.Button("Tạo video")
89
-
90
- generate_button.click(fn=process_input, inputs=input_text, outputs=video_output)
91
-
92
- # Chạy ứng dụng Gradio
93
- demo.launch()import gradio as gr
94
- from PIL import Image, ImageDraw, ImageFont
95
- from moviepy.editor import ImageClip, concatenate_videoclips
96
- import os
97
-
98
  def create_video(word_list):
99
  # Thay vì cố gắng lấy font từ tệp .ttf, ta sẽ dùng font mặc định
100
  font_size = 300 # Tăng kích thước chữ lên 5 lần
 
3
  from moviepy.editor import ImageClip, concatenate_videoclips
4
  import os
5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
  def create_video(word_list):
7
  # Thay vì cố gắng lấy font từ tệp .ttf, ta sẽ dùng font mặc định
8
  font_size = 300 # Tăng kích thước chữ lên 5 lần