Update utils.py
Browse files
utils.py
CHANGED
@@ -1,25 +1,22 @@
|
|
1 |
import glob
|
2 |
import os
|
3 |
import random
|
4 |
-
|
5 |
import requests
|
6 |
from loguru import logger
|
7 |
from moviepy.editor import AudioFileClip, VideoFileClip, concatenate_videoclips
|
8 |
|
9 |
-
def
|
10 |
"""
|
11 |
-
Lấy
|
12 |
"""
|
13 |
api_key = os.getenv('Pexels_API_KEY')
|
14 |
-
|
15 |
-
url = f"https://api.pexels.com/v1/search?query={query}%20Vietnamese&per_page=30"
|
16 |
headers = {"Authorization": api_key}
|
17 |
response = requests.get(url, headers=headers)
|
18 |
if response.status_code == 200:
|
19 |
data = response.json()
|
20 |
-
if data['
|
21 |
-
|
22 |
-
return random.choice(data['photos'])['src']['medium']
|
23 |
return None
|
24 |
|
25 |
def get_bgm_file(bgm_type: str = "random", bgm_file: str = ""):
|
@@ -30,7 +27,7 @@ def get_bgm_file(bgm_type: str = "random", bgm_file: str = ""):
|
|
30 |
return ""
|
31 |
if bgm_type == "random":
|
32 |
suffix = "*.mp3"
|
33 |
-
song_dir =
|
34 |
files = glob.glob(os.path.join(song_dir, suffix))
|
35 |
return random.choice(files) if files else ""
|
36 |
|
@@ -60,6 +57,7 @@ def combine_videos(combined_video_path: str,
|
|
60 |
|
61 |
for video_path in video_paths:
|
62 |
clip = VideoFileClip(video_path).without_audio()
|
|
|
63 |
if (audio_duration - video_duration) < clip.duration:
|
64 |
clip = clip.subclip(0, (audio_duration - video_duration))
|
65 |
elif max_clip_duration < clip.duration:
|
@@ -87,7 +85,6 @@ def generate_video(video_paths: list[str],
|
|
87 |
|
88 |
combine_videos(combined_video_path, video_paths, audio_path)
|
89 |
|
90 |
-
# Add audio to the final video
|
91 |
final_video = VideoFileClip(combined_video_path)
|
92 |
audio_clip = AudioFileClip(audio_path)
|
93 |
final_video = final_video.set_audio(audio_clip)
|
@@ -95,7 +92,6 @@ def generate_video(video_paths: list[str],
|
|
95 |
logger.info(f"Writing final video to {output_file}")
|
96 |
final_video.write_videofile(output_file, audio_codec="aac")
|
97 |
|
98 |
-
# Remove temporary video
|
99 |
os.remove(combined_video_path)
|
100 |
logger.success(f"Completed generating video: {output_file}")
|
101 |
return output_file
|
|
|
1 |
import glob
|
2 |
import os
|
3 |
import random
|
|
|
4 |
import requests
|
5 |
from loguru import logger
|
6 |
from moviepy.editor import AudioFileClip, VideoFileClip, concatenate_videoclips
|
7 |
|
8 |
+
def get_pexels_video(query):
|
9 |
"""
|
10 |
+
Lấy video từ Pexels API dựa trên query.
|
11 |
"""
|
12 |
api_key = os.getenv('Pexels_API_KEY')
|
13 |
+
url = f"https://api.pexels.com/videos/search?query={query}&per_page=30"
|
|
|
14 |
headers = {"Authorization": api_key}
|
15 |
response = requests.get(url, headers=headers)
|
16 |
if response.status_code == 200:
|
17 |
data = response.json()
|
18 |
+
if data['videos']:
|
19 |
+
return random.choice(data['videos'])['video_files'][0]['link']
|
|
|
20 |
return None
|
21 |
|
22 |
def get_bgm_file(bgm_type: str = "random", bgm_file: str = ""):
|
|
|
27 |
return ""
|
28 |
if bgm_type == "random":
|
29 |
suffix = "*.mp3"
|
30 |
+
song_dir = "/data/bg-music" # Thay thế bằng đường dẫn thực tế
|
31 |
files = glob.glob(os.path.join(song_dir, suffix))
|
32 |
return random.choice(files) if files else ""
|
33 |
|
|
|
57 |
|
58 |
for video_path in video_paths:
|
59 |
clip = VideoFileClip(video_path).without_audio()
|
60 |
+
# Cắt video nếu dài hơn thời lượng tối đa
|
61 |
if (audio_duration - video_duration) < clip.duration:
|
62 |
clip = clip.subclip(0, (audio_duration - video_duration))
|
63 |
elif max_clip_duration < clip.duration:
|
|
|
85 |
|
86 |
combine_videos(combined_video_path, video_paths, audio_path)
|
87 |
|
|
|
88 |
final_video = VideoFileClip(combined_video_path)
|
89 |
audio_clip = AudioFileClip(audio_path)
|
90 |
final_video = final_video.set_audio(audio_clip)
|
|
|
92 |
logger.info(f"Writing final video to {output_file}")
|
93 |
final_video.write_videofile(output_file, audio_codec="aac")
|
94 |
|
|
|
95 |
os.remove(combined_video_path)
|
96 |
logger.success(f"Completed generating video: {output_file}")
|
97 |
return output_file
|