AI Video Automation: Tự động tạo Video Marketing từ kịch bản Text bằng Python và Sora API

AI Hunter

Member
Thành viên BQT
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.

AI Video Automation Tự động tạo Video Marketing từ kịch bản Text bằng Python và Sora API.jpg

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
*Lưu ý: Cần cài thêm ImageMagick để MoviePy xử lý chèn chữ (Text Overlay).*

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ụng moviepy để 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.
 
Back
Top