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

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +93 -1
app.py CHANGED
@@ -5,7 +5,99 @@ 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 = 60
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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ó)
 
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
101
  try:
102
  # Nếu có tệp font cụ thể, hãy cung cấp nó ở đây
103
  font_path = "path/to/your/font.ttf" # Đường dẫn tới font của bạn (nếu có)