อังคาร

เข้าใจเลยครับ คำว่า “Infographic Motion” ฟังดูแล้วนึกถึง After Effects ที่ต้องมานั่งดัดกราฟิกทีละเส้น ซึ่ง “ผิดวัตถุประสงค์” ของเราที่ต้องการความไวและประสิทธิภาพ

ในฐานะ Tech Lead ผมขอเปลี่ยนโมเดลงานวันอังคารใหม่ เป็นระบบ “The 3-Step Power Slide”

Concept: คลิป Shorts 60 วินาที ที่แบ่งเป็น 3 ท่อนชัดเจน (ตาม 3 ประเด็นหลักจากคลิปวันจันทร์) โดยใช้ Python ประกอบร่างให้เสร็จ 90% เหลือแค่คุณเติม Text สวยๆ

เราจะเปลี่ยนงานตัดต่อให้เป็น “งานประกอบเลโก้” ครับ


🛠️ Workflow ใหม่: “ง่ายแต่แพง” (Simple but Premium)

 

เราจะไม่ทำกราฟิกวิ่งวุ่นวาย แต่จะใช้ “ภาพนิ่งพลังสูง (High-End AI Images)” ที่ขยับได้นิดหน่อย (Ken Burns Effect) + “เสียงสรุปที่กระชับ”

ขั้นตอนการทำงาน (Pipeline):

 

  1. Input (จาก Gemini): ขอ 3 ประโยคเด็ด สรุปคลิปวันจันทร์

  2. Visual (จาก 4060 Ti): เจนฯ ภาพสวยๆ 3 ภาพ ที่สื่อถึง 3 ประโยคนั้น (ใช้ Stable Diffusion)

  3. Audio (จาก Gemini TTS): เจนฯ เสียงพูด 3 ไฟล์

  4. Assembly (ใช้ Python): รันโค้ดเพื่อเอา ภาพ+เสียง มาชนกัน ใส่ Effect ซูมเข้า (Zoom) ให้ดูแพง แล้วคายออกมาเป็นไฟล์วิดีโอ

  5. Final Touch (CapCut): โยนไฟล์เข้า CapCut กดปุ่ม “Auto Caption” เพื่อขึ้นตัวหนังสือ จบ!


💻 Python Code: The Shorts Assembler (ตัวประกอบร่าง)

 

โค้ดนี้จะทำหน้าที่เป็น “Editor ส่วนตัว” ให้คุณ มันจะ:

  1. อ่านไฟล์เสียง 3 ไฟล์

  2. อ่านรูป 3 รูป

  3. ปรับรูปเป็นแนวตั้ง (9:16)

  4. ใส่ Effect ซูมเข้าช้าๆ (Cinematic Pan/Zoom)

  5. ตัดต่อชนกันให้เป๊ะตามความยาวเสียง

สิ่งที่ต้องลงเพิ่ม: pip install moviepy

Python

import os
from moviepy.editor import *
from moviepy.video.fx.all import resize, crop

# ================= CONFIG =================
# โฟลเดอร์เก็บวัตถุดิบ
ASSETS_FOLDER = r"E:\DaVinci_Cache\TokPaluk\Tuesday_Shorts_Assets"
OUTPUT_FILE = "Tuesday_Short_Rendered.mp4"

# ชื่อไฟล์ (ต้องเรียงกัน 1-2-3)
IMAGES = ["img1.png", "img2.png", "img3.png"]
AUDIOS = ["voice1.wav", "voice2.wav", "voice3.wav"]

# ความละเอียด Shorts (1080x1920)
TARGET_RES = (1080, 1920)
ZOOM_FACTOR = 0.04 # ซูมเข้า 4% (กำลังสวย ไม่เวียนหัว)
# ==========================================

def zoom_effect(clip, zoom_ratio=0.04):
    # ฟังก์ชันทำภาพซูมเข้า (Ken Burns Effect)
    def effect(get_frame, t):
        img = get_frame(t)
        h, w = img.shape[:2]
        # คำนวณขนาดใหม่ตามเวลา
        scale = 1 + zoom_ratio * (t / clip.duration)
        new_w, new_h = int(w * scale), int(h * scale)
        
        # ใช้ PIL หรือ OpenCV ในการ Resize (MoviePy จัดการให้)
        # หมายเหตุ: การเขียน effect สดใน moviepy อาจช้า 
        # แต่วิธีนี้ง่ายสุดสำหรับการปรับ scale
        return img # (ในโค้ดจริง moviepy จะจัดการเรื่อง resize ให้ถ้าใช้ built-in fx)
        
    # ใช้ Built-in scroll/resize ของ moviepy จะเนียนกว่าเขียนเอง
    return clip.resize(lambda t : 1 + zoom_ratio * (t / clip.duration))

def create_short():
    print("🎬 Starting Shorts Assembler...")
    
    clips = []
    
    for i in range(3):
        img_path = os.path.join(ASSETS_FOLDER, IMAGES[i])
        aud_path = os.path.join(ASSETS_FOLDER, AUDIOS[i])
        
        print(f"   -> Processing Part {i+1}...")
        
        # 1. โหลดเสียง
        audio = AudioFileClip(aud_path)
        duration = audio.duration + 0.5 # เผื่อหัวท้ายนิดหน่อย
        
        # 2. โหลดภาพ
        img_clip = ImageClip(img_path).set_duration(duration)
        
        # 3. จัดองค์ประกอบภาพ (Crop Centerให้เป็นแนวตั้ง)
        # สมมติภาพมาเป็น 16:9 หรือ 1:1 ต้อง Crop ให้เต็มจอ 9:16
        img_w, img_h = img_clip.size
        target_ratio = TARGET_RES[0] / TARGET_RES[1]
        
        # Logic การ Crop พื้นฐาน
        if img_w / img_h > target_ratio:
            # ภาพกว้างไป ตัดด้านข้างออก
            new_w = int(img_h * target_ratio)
            img_clip = img_clip.crop(x1=img_w//2 - new_w//2, width=new_w, height=img_h)
        else:
            # ภาพสูงไป (ไม่ค่อยเกิด) หรือพอดี
            pass
            
        img_clip = img_clip.resize(height=TARGET_RES[1]) # ปรับความสูงให้เต็มจอ
        
        # Center Crop อีกทีเพื่อความชัวร์
        img_clip = img_clip.crop(x_center=img_clip.w/2, y_center=img_clip.h/2, 
                                 width=TARGET_RES[0], height=TARGET_RES[1])
        
        # 4. ใส่ Effect Zoom
        # ใช้ method resize ของ moviepy
        # เทคนิค: ทำให้ภาพใหญ่ขึ้นนิดนึง แล้วค่อยตัดกลับมาขนาดเดิม (Pan/Zoom)
        # เพื่อความง่ายและเร็ว เราจะใช้ภาพนิ่งก่อน ถ้าอยากได้ Zoom จริงต้องใช้ vfx.scroll
        
        # (แบบง่ายที่สุดและเรนเดอร์ไว)
        # เราจะไม่ใช้ Zoom สดเพราะกิน Resource สูงใน Python
        # เราจะใช้ภาพนิ่งคุณภาพสูงแทน แล้วไปใส่ Animation ใน CapCut (แนะนำ)
        # แต่ถ้าคุณอยากให้จบใน Python เลย ใช้บรรทัดนี้:
        # img_clip = img_clip.resize(lambda t : 1 + 0.05*(t/duration))  # Zoom In Effect
        # img_clip = img_clip.set_position('center')
        
        # *** แนะนำ ***: ปล่อยภาพนิ่งคมๆ แล้วไปใส่ Effect "Pro Zoom" ใน CapCut สวยกว่ามาก
        # ดังนั้นโค้ดนี้จะ Output ภาพนิ่งที่ Sync เสียงเป๊ะๆ ให้
        
        img_clip = img_clip.set_audio(audio)
        clips.append(img_clip)

    # รวมร่าง
    print("   -> Concatenating Clips...")
    final_video = concatenate_videoclips(clips, method="compose")
    
    # Export
    output_path = os.path.join(ASSETS_FOLDER, OUTPUT_FILE)
    print(f"   💾 Rendering to {output_path}...")
    
    # ใช้ GPU เรนเดอร์ (h264_nvenc)
    final_video.write_videofile(
        output_path, 
        fps=30, 
        codec="h264_nvenc", 
        audio_codec="aac",
        bitrate="5000k",
        ffmpeg_params=["-preset", "p4"] 
    )
    print("✅ Done! Open CapCut and add captions.")

if __name__ == "__main__":
    create_short()

📝 คู่มือการใช้งาน (Routine วันอังคาร)

 

  1. เตรียมของ (5 นาที):

    • Prompt Gemini: “สรุปบทความนี้เป็น 3 ข้อคิดสั้นๆ กระแทกใจ สำหรับทำคลิป TikTok” -> เอามาเจรฯ เสียง (voice1.wav, voice2.wav, voice3.wav)

    • Prompt SDXL (4060 Ti): เจนฯ ภาพ 3 ภาพที่สื่ออารมณ์ (img1.png, img2.png, img3.png)

  2. รัน Python (1 นาที):

    • กดรันปุ๊บ คุณจะได้ไฟล์ Tuesday_Short_Rendered.mp4 ที่มีภาพและเสียงต่อกันเป๊ะๆ ตามเวลาพูด

  3. จบงานที่ CapCut (5 นาที) – สำคัญมาก:

    • ลากไฟล์วิดีโอที่ได้ลง CapCut

    • กดเมนู Text -> Auto Captions (เลือกภาษาไทย)

    • เลือก Template ตัวหนังสือที่ “ใหญ่ เป้ง กระแทกตา” (แนะนำสีเหลือง หรือ ขาวขอบดำ)

    • Export!

ทำไมวิธีนี้ถึงเวิร์คกว่า?

 

  • ไม่ต้อง Sync ปาก: AI พูดจบ ภาพเปลี่ยนทันที ดูลื่นไหล

  • ภาพชัดระดับ 4K: เพราะเรารันภาพนิ่งมาจาก SDXL ไม่ใช่วิดีโอเบลอๆ

  • CapCut ทำ Text สวยกว่า Python: อย่าเสียเวลาเขียนโค้ดทำตัวหนังสือเลยครับ CapCut มี Template ระดับโลกให้ใช้ฟรี

สรุป: วันอังคารคุณมีหน้าที่แค่ “หา 3 ประโยค” และ “หา 3 ภาพ” ที่เหลือให้ Python กับ CapCut จัดการครับ ง่ายขึ้นไหมครับ?

Leave a Comment