Reframe + Batch + Chroma
ทุกอย่างรวมกัน
โหมดหนักที่สุดของ V3 — จาก vlog 5 นาที ตัดเป็น 10 ชิ้น แต่ละชิ้นมี 21 มุม = 210 outputs ในการ render ครั้งเดียว
🧠 TC04 = TC02 + TC03 รวมกัน
TC02 = 1 คลิป + reframe 21 มุม = 21 outputs
TC03 = 1 คลิปยาว + batch = N outputs
TC04 = 1 คลิปยาว + reframe 21 มุม + batch = 21 × N outputs
🎬 TC04 คืออะไร?
คือการ "ตัด + ซูม + ตัดจอเขียว" ทั้งหมดในครั้งเดียว
ตัวอย่างในชีวิตจริง
คุณมี vlog ท่องเที่ยวญี่ปุ่น 10 นาที — อยากตัดเป็น 20 shorts × TikTok แต่ละ short มี 21 มุมให้เลือก เพราะ content มีทั้งคน อาหาร วิว
TC04 ทำให้ใน 1 render ได้ 20 × 21 = 420 outputs — เอาไปเลือกทีหลังว่าจะใช้มุมไหน
ตัวอย่าง: vlog 5 นาที → 10 segments × 21 angles = 210 outputs
🎯 เมื่อไหร์ใช้ TC04?
TC04 เหมาะกับงาน "1 คลิปยาว → หลาย short × หลายมุม"
✅ เหมาะมาก
- 🎥 Vlog 10+ นาที → 20-30 shorts × หลายมุม
- 📺 รายการทีวี → ตัด+ซูม ทุก scene
- 🎤 สัมภาษณ์ยาว → แยกเป็น quote clips + มุม
- 🎓 คอร์สออนไลน์ → แยก lesson + ซูมกระดาน
- 🎮 Gameplay → highlight + เลือกมุม
- 🎙️ Podcast 4 คน → ตัด + ซูมคนละคน
❌ ไม่เหมาะ
- ❌ คลิปสั้นอยู่แล้ว → ใช้ TC01
- ❌ อยากได้แค่ 1 มุม → ใช้ TC03
- ❌ quota เหลือน้อย (210 outputs/render = 1 quota แต่ไฟล์เยอะ)
- ❌ เครื่องช้า (TC04 กิน CPU/GPU เยอะสุด)
📊 Output Matrix — คำนวณ outputs ก่อน render
TC04 outputs = segments × lens × composition
ตัวอย่างการคำนวณ
| ความยาว product | segment | lens | comp | Total outputs | ไฟล์โดยประมาณ |
|---|---|---|---|---|---|
| 2 นาที | 30s | 7 | 3 | 4 × 7 × 3 = 84 | ~250MB |
| 5 นาที | 30s | 7 | 3 | 10 × 7 × 3 = 210 | ~700MB |
| 10 นาที | 60s | 7 | 3 | 10 × 7 × 3 = 210 | ~700MB |
| 30 นาที | 60s | 3 | 2 | 30 × 3 × 2 = 180 | ~500MB |
| 60 นาที | 120s | 3 | 1 | 30 × 3 × 1 = 90 | ~300MB |
TC04 สร้างไฟล์เยอะมาก — 1 render vlog 5 นาที = 210 MP4 = 700MB+ ระวัง disk quota!
⚙️ TC04 ทำงานยังไง?
4 ขั้นตอนหลัก (อัตโนมัติทั้งหมด)
Split — ตัด product เป็น N segments
เหมือน TC03 — ใช้ ffmpeg segment filter แบ่งเป็น N ไฟล์ ตาม segment_duration
Reframe — ซูมแต่ละ segment เป็น 21 มุม
เหมือน TC02 แต่ทำกับทุก segment — ได้ N × 21 outputs (ยังมีจอเขียว)
Chroma — ตัดจอเขียวทุกมุม ใส่ background
เหมือน TC01 — เอา N × 21 outputs ไปผ่าน chroma ได้ N × 21 = 21×N final MP4s
Encode + Upload — บันทึก MP4 และอัปโหลดกลับ
ทุก output ถูก encode เป็น H.264 MP4 แล้วอัปโหลดมาให้ download
🎛️ ตั้งค่า TC04
TC04 = TC02 settings + TC03 settings (รวมกัน)
1. Chroma (เหมือน TC01)
width, height, preset, key_color, similarity, blend, despill, bitrate
→ ดูรายละเอียดในคอร์ส TC01
2. Reframe (จาก TC02)
reframe_lens_count — 1-7 lens (default 7)
reframe_compositions — center,left,right (เลือก 1-3)
reframe_short_side — 720 default (เล็ก = เร็ว, ใหญ่ = คม)
3. Batch (จาก TC03)
segment_duration — ความยาวแต่ละ segment (วินาที) · 0.5-600
match_count_mode — product_count หรือ segment_count
💻 ตัวอย่าง Python
เรียก V3 API แบบ TC04
# tc04_render.py — เรียก V3 API แบบ TC04 (reframe + batch + chroma)
import requests, time
BASE = "https://green.cutdee.com/v3api"
API_KEY = "cutdee_vdo_..." # เก็บใน env
H = {"Authorization": f"Bearer {API_KEY}"}
# 1. Submit TC04 — vlog 5 นาที → 10 segs × 21 angles = 210 outputs
files = {
"product": ("vlog5min.mp4", open("vlog5min.mp4", "rb"), "video/mp4"),
"background": ("studio.mp4", open("studio.mp4", "rb"), "video/mp4"),
}
data = {
# Chroma
"width": "1080", "height": "1920",
"preset": "fast", "key_color": "#00FF00",
"similarity": "0.32", "blend": "0.06", "despill": "0.35",
# Reframe (จาก TC02)
"reframe_lens_count": "7",
"reframe_compositions": "center,left,right",
# Batch (จาก TC03)
"segment_duration": "30",
}
r = requests.post(f"{BASE}/api/render/tc04", files=files, data=data, headers=H, timeout=600)
job = r.json()
print("queued:", job["job_id"])
# 2. Poll (TC04 ใช้เวลานาน ~60-180 วินาที)
while True:
j = requests.get(f"{BASE}/api/job/{job['job_id']}", headers=H).json()
pct = j.get("progress", 0)
n = len(j.get("output_files", []))
print(f" {j['status']:12s} progress={pct}% outputs={n}/210")
if j["status"] in ("succeeded", "failed"):
break
time.sleep(5)
# 3. Download ทั้งหมด (organized by lens)
if j["status"] == "succeeded":
import os, re
for fn in j["output_files"]:
# Filename: product_xxx__lens35mm__center__tc04_*.mp4
m = re.search(r"lens(\d+mm)__(\w+)", fn)
if m:
lens, comp = m.group(1), m.group(2)
folder = f"results/{lens}/{comp}"
else:
folder = "results/other"
os.makedirs(folder, exist_ok=True)
out = requests.get(
f"{BASE}/api/v1/jobs/{job['job_id']}/download/{fn}", headers=H)
open(f"{folder}/{fn}", "wb").write(out.content)
print(f"saved {len(j['output_files'])} files organized by lens")
🧠 ทดสอบความเข้าใจ
❓ 1. vlog 10 นาที ÷ 60s = 10 segments × 21 angles จะได้กี่ outputs?
❓ 2. TC04 ใช้เวลา render นานเท่าไหร่ (vlog 5 นาที)?
❓ 3. ถ้าอยากให้ TC04 เร็วขึ้น ควรทำยังไง?
💡 เคล็ดลับใช้งาน
⚡ เร่งความเร็ว
- ลด
reframe_lens_countเหลือ 3 (wide+std+portrait) - ใช้
reframe_compositions=centerตัวเดียว - ใช้
preset=ultrafast(ไฟล์ใหญ่ขึ้นนิดหน่อย) - Output: 84 → 30 → 10 outputs (3 เท่าเร็วขึ้น)
💾 จัดการไฟล์
TC04 สร้างไฟล์เยอะ — ใช้ Python script จัด folder ตาม lens/composition/segment เพื่อหาไฟล์ง่ายๆ
💰 คำนวณ quota
TC04 1 render = 1 quota (ไม่ใช่ 210) แต่ได้ไฟล์ 210 — free tier 100 renders/mo = 21,000 outputs ฟรี!
🔄 Smart batch
ถ้ามี vlog 10 ตอน → ส่ง TC04 ทีเดียว = 10 × 1 = 10 render jobs ใช้ quota 10
🎵 TC04 กับเสียง (Audio behavior)
คำถามที่หลายคนสงสัย: "ถ้ามีเสียง มันจะตัดตามความยาวเสียงมั้ย?"
❌ คำตอบสั้นๆ: ไม่
TC04 ตัดตาม "เวลา" เท่านั้น ไม่สนใจ audio
segment_duration = 30s หมายถึง "ตัดทุก 30 วินาทีของวิดีโอ" — ไม่สนว่าใน 30 วินาทีนั้นจะพูด 3 คำหรือ 30 คำ เป็นเสียงเงียบหรือเสียงดัง
Audio ทำอะไรได้บ้างใน TC04?
✅ Audio passthrough (เสียงจาก product)
ถ้าไม่ใส่ audio file → output จะใช้เสียงจาก product.mp4 โดยตรง (stream copy ถ้า codec ตรงกัน)
→ เสียงจะถูกตัดตาม segment ด้วย (เช่น segment 30s = เสียง 30s)
✅ Audio file แยก (background music/voiceover)
ถ้าใส่ audio file → output จะใช้เสียงจาก audio file นั้นแทน (จะ loop ถ้าสั้นกว่า segment)
→ audio ไม่กระทบ segment_duration
ตัวอย่าง: vlog 5 นาที + bgm.mp3 + segment=30s
→ Audio ยาวพอดี ก็จะวนลูปต่อเนื่องตลอด 5 นาที
ถ้าอยากตัดตามเสียง/จังหวะพูดจริงๆ?
V3 ปัจจุบัน ไม่มี audio-based segmentation ในตัว — ต้องทำเองด้วย Python + ffmpeg:
# 1. ใช้ ffmpeg detect silence หา scene boundaries
import subprocess
result = subprocess.run([
"ffmpeg", "-i", "vlog.mp4",
"-af", "silencedetect=noise=-30dB:d=0.5",
"-f", "null", "-"
], capture_output=True, text=True)
# 2. parse silence timestamps → หาจุดตัด
# 3. ใช้ ffmpeg -ss -t ตัดวิดีโอเป็นไฟล์ย่อยๆ ก่อน
# 4. แล้วค่อยส่ง TC01 ทีละไฟล์ (ไม่ต้องใช้ TC04)
# หรือใช้ scene detection (แม่นกว่า silence detection):
# ffmpeg -i vlog.mp4 -filter:v "select='gt(scene,0.3)',showinfo" -f null -
ถ้าต้องการ "ตัดตามเนื้อหาจริง" ใช้ Python script ตัดวิดีโอเป็นไฟล์ย่อยๆ ก่อน → ส่ง TC01 เป็นงานๆ ไป — จะยืดหยุ่นกว่า TC04 มาก และคุม quality ได้ดีกว่า
⚠️ ข้อผิดพลาดที่พบบ่อย
vlog 5 นาที ÷ 30s × 7 × 3 = 210 MP4 = 700MB+ — ถ้า disk เหลือ 500MB จะ fail ตอน encode
reframe ไม่มีประโยชน์ (crop แค่นิดเดียว) — ใช้ TC03 จะคุ้มกว่า
vlog 5 นาที ÷ 5s = 60 segments × 21 = 1,260 outputs — ใช้เวลา render นานมาก และ disk เต็ม
📚 เรียนอะไรต่อดี?
- Python API — batch 100+ jobs, queue management, smart retry
- คำนวณต้นทุน — เมื่อไหร่ควรใช้ TC01/02/03/04
- Troubleshooting — แก้ปัญหา INVALID_INPUT, queue ค้าง, despill เพี้ยน