AI Video Automation: Tự động tạo Video Marketing từ kịch bản Text bằng Python và Sora API
Bạn muốn xây dựng kênh TikTok về "Triết lý cuộc sống" hay "Review công nghệ" nhưng lười edit video?
Năm 2026, dân chuyên nghiệp không edit bằng tay. Họ edit bằng Code.
Hôm nay, tôi sẽ hướng dẫn bạn xây dựng "cỗ máy in video" tự động.
Input: "Hãy làm video giới thiệu về iPhone 18 Pro Max."
Output: Video MP4 dài 30s, có giọng đọc AI, hình ảnh minh họa từ Sora và nhạc nền.
*Lưu ý: Cần cài thêm ImageMagick để MoviePy xử lý chèn chữ (Text Overlay).*
Tạo file
Sức mạnh của AI không phải là nó làm đẹp hơn con người, mà là nó không biết mệt.
Bạn muốn xây dựng kênh TikTok về "Triết lý cuộc sống" hay "Review công nghệ" nhưng lười edit video?
Năm 2026, dân chuyên nghiệp không edit bằng tay. Họ edit bằng Code.
Hôm nay, tôi sẽ hướng dẫn bạn xây dựng "cỗ máy in video" tự động.
Input: "Hãy làm video giới thiệu về iPhone 18 Pro Max."
Output: Video MP4 dài 30s, có giọng đọc AI, hình ảnh minh họa từ Sora và nhạc nền.
1. Kiến trúc hệ thống (The Pipeline)
Chúng ta không chỉ gọi 1 API, mà là phối hợp 3 "nhạc trưởng":- Kịch bản (Script): GPT-5 viết nội dung ngắn gọn, tách phân cảnh.
- Hình ảnh (Visual): Sora API tạo các đoạn clip 5s dựa trên phân cảnh.
- Âm thanh (Audio): OpenAI TTS (HD model) tạo giọng đọc truyền cảm.
- Hậu kỳ (Assembly): Thư viện Python `moviepy` ghép tất cả lại.
2. Cài đặt thư viện
Bash:
pip install openai moviepy requests
3. Triển khai Code (Python)
Tạo file
auto_video.py.Bước 1: Viết kịch bản & Sinh giọng đọc
Python:
import os
from openai import OpenAI
client = OpenAI(api_key="sk-...")
def generate_assets(topic):
# 1. GPT viết kịch bản (chia làm 2 câu ngắn)
print(f"🤖 Đang viết kịch bản về: {topic}...")
response = client.chat.completions.create(
model="gpt-5-turbo",
messages=[{"role": "user", "content": f"Viết 2 câu ngắn quảng cáo về {topic}. Mỗi câu dưới 10 từ."}]
)
script = response.choices[0].message.content.split('\n')
script = [s for s in script if s.strip()][:2] # Lấy 2 dòng đầu
# 2. Sinh giọng đọc (TTS)
audio_files = []
print("🎙️ Đang thu âm giọng đọc...")
for i, text in enumerate(script):
res = client.audio.speech.create(
model="tts-1-hd",
voice="onyx",
input=text
)
filename = f"audio_{i}.mp3"
res.stream_to_file(filename)
audio_files.append({"text": text, "audio": filename})
return audio_files
Bước 2: Sinh Video từ Sora API
Đây là phần đắt giá nhất. Chúng ta dùng prompt từ kịch bản để tạo clip.
Python:
import requests
import time
def generate_sora_clip(prompt, duration=5):
print(f"🎬 Đang quay phim bằng Sora: '{prompt}'...")
# Giả lập API call (Cấu trúc chuẩn 2026)
try:
video_response = client.video.generations.create(
model="sora-v2-turbo", # Model tối ưu tốc độ
prompt=f"Cinematic shot, 8k, {prompt}",
size="1080x1920", # Khổ dọc cho TikTok
duration=duration
)
video_url = video_response.data[0].url
# Tải video về
video_filename = f"clip_{int(time.time())}.mp4"
with open(video_filename, 'wb') as f:
f.write(requests.get(video_url).content)
return video_filename
except Exception as e:
print(f"Lỗi Sora: {e}")
return "placeholder.mp4" # Fallback video nếu lỗi
Bước 3: Dựng phim (Editor chạy bằng cơm... gạo)
Sử dụngmoviepy để ghép Audio + Video + Subtitle.
Python:
from moviepy.editor import VideoFileClip, AudioFileClip, TextClip, CompositeVideoClip, concatenate_videoclips
def assemble_video(assets):
final_clips = []
for asset in assets:
# 1. Lấy Audio
audioclip = AudioFileClip(asset['audio'])
# 2. Tạo Video từ Sora (độ dài bằng audio + 1s padding)
video_path = generate_sora_clip(asset['text'], duration=audioclip.duration + 1)
videoclip = VideoFileClip(video_path).subclip(0, audioclip.duration)
# 3. Chèn Subtitle
txt_clip = TextClip(asset['text'], fontsize=70, color='white', font='Arial-Bold', stroke_color='black', stroke_width=2)
txt_clip = txt_clip.set_pos('center').set_duration(audioclip.duration)
# 4. Gộp Video + Audio + Subtitle
video_combined = CompositeVideoClip([videoclip, txt_clip])
video_combined = video_combined.set_audio(audioclip)
final_clips.append(video_combined)
# Nối tất cả phân cảnh
print("🎞️ Đang render video cuối cùng...")
final_video = concatenate_videoclips(final_clips)
final_video.write_videofile("output_marketing.mp4", fps=24, codec="libx264")
# --- CHẠY CHƯƠNG TRÌNH ---
if __name__ == "__main__":
data = generate_assets("Giày Nike Air Force 1 phong cách Cyberpunk")
assemble_video(data)
print("✅ Xong! File 'output_marketing.mp4' đã sẵn sàng.")
4. Tối ưu chi phí (Quan trọng)
Gọi Sora API rất tốn kém (khoảng $0.5/video). Để chạy số lượng lớn (Mass production), bạn nên:- Prompt Caching: Nếu làm nhiều video cùng chủ đề, hãy tái sử dụng các clip Sora cũ (Intro/Outro) thay vì generate mới hoàn toàn.
- Hybrid Model: Dùng Sora cho các shot quan trọng (Key visual), dùng thư viện Stock Video miễn phí (Pexels API) cho các cảnh phụ.
- Draft Mode: Chạy thử với model "Sora-Turbo" (độ phân giải thấp) trước khi render bản 4K.
Kết luận
Với chưa đầy 80 dòng code, bạn đã thay thế được một Editor cơ bản. Hệ thống này có thể chạy 24/7, tạo ra hàng ngàn video mỗi ngày.Sức mạnh của AI không phải là nó làm đẹp hơn con người, mà là nó không biết mệt.