ทำดัชนีวิดีโอทั้งปีแบบโลคัลบน MacBook ปี 2021 ด้วย Gemma 4 31B (สวอป 50GB)
(blog.simbastack.com)- คอขวดของคลังวิดีโอไม่ใช่เครื่องมือตัดต่อ แต่คือการค้นหาไม่เจอ จึงโฟกัสที่การเปลี่ยนคลิปไม่มีป้ายกำกับให้กลายเป็นดัชนีที่ค้นถามเป็นภาษาอังกฤษได้
- ออกแบบแบบ local-first โดยสร้างไฟล์ sidecar
.description.mdไว้ข้างแต่ละคลิป และดึง rating, แสง, ตำแหน่ง, ทรานสคริปต์, คีย์เวิร์ด, คำอธิบายแบบร้อยแก้ว ออกจากการเรียก vision เพียงครั้งเดียว - ไปป์ไลน์รวม
ffprobe,exiftool, Nominatim,ffmpeg, WhisperX,insightface, และโมเดล vision เพื่อสร้าง metadata, GPS, เฟรม, ทรานสคริปต์, และ face embedding - MacBook Pro 16 นิ้ว ปี 2021 รุ่น M1 Max 64GB รัน Gemma 4 31B Q4 บน LM Studio และระหว่างประมวลผลจำนวนมาก สวอปพุ่งสูงสุดถึง 50.89GB
- สคีมาแบบมีโครงสร้างและ ข้อจำกัดแบบ enum ช่วยลด hallucination และทำให้จัดรูปแบบที่ประมวลผลจำนวนมากด้วย 31B แบบโลคัลก่อน แล้วค่อยส่งเฉพาะ 10~20% ที่ยากไปประเมินซ้ำด้วยโมเดลคลาวด์ได้
จุดเริ่มต้นของปัญหา: ค้นหายากกว่าตัดต่อ
- ระหว่างที่อยู่ Maasai Mara เกือบครึ่งปี วิดีโอที่ถ่ายด้วย iPhone, DJI Pocket, โดรน, Nikon Z8, และ Ray-Ban Meta เพิ่มขึ้นเรื่อย ๆ แต่ส่วนใหญ่ก็ถูกทิ้งไว้โดยไม่เคยเปิดกลับมาดู
- ช่องโซเชียลของ Mara Hilltop ไม่ได้หยุดไป 3 เดือนเพราะขาดคอนเทนต์ แต่เพราะขาดเวลาตัดต่อ
- ด้วย Claude Code และ Opus 4.5/4.6 งานพัฒนาสามารถรันเอเจนต์ยาว ๆ และทำงานขนานได้ และพอชนกับการเปิดตัวที่พักแบบเสียเงินแห่งแรกของ KaribuKit เวลาสำหรับตัดต่อวิดีโอยิ่งน้อยลงไปอีก
- วิธีแก้แรกที่นึกถึงคือสแตก SaaS ราคา $140 ต่อเดือน ที่ประกอบด้วย Eddie AI, Higgsfield MCP, Submagic, และ Buffer แต่สุดท้ายมันไม่ตรงกับคอขวดจริง
- วิดีโอ generative AI ไม่เข้ากับแบรนด์ท่องเที่ยวจริง และในสถานการณ์ที่ผู้เข้าพักคาดหวังสถานที่จริง ฉาก AI ที่แสดงผิดอาจทำลายความน่าเชื่อถือได้
- ความถี่การโพสต์ที่เป็นจริงไม่ได้อยู่ที่ 3~5 ชิ้นต่อสัปดาห์ แต่ใกล้กับ 2~3 ชิ้นต่อสัปดาห์มากกว่า ทำให้แผนแรกมีแนวโน้มล้มเหลวตั้งแต่สัปดาห์ที่สอง
- DaVinci Resolve Studio ที่มีอยู่แล้ว พร้อม IntelliSearch, Smart Bins, และ Voice to Subtitle ใน Resolve 21 ครอบคลุมความสามารถประมาณ 70% ของที่ Eddie ให้ได้
- องค์ประกอบที่เหลือคือให้ Claude Code ควบคุม Resolve ผ่าน DaVinci Resolve MCP แบบโอเพนซอร์ส และใช้ ElevenLabs ทำ voiceover เฉพาะคลิปเชิงข้อมูล ทำให้ต้นทุนลดลงเหลือ $22 ต่อเดือน
คอขวดที่แท้จริง: ต้องมีดัชนีก่อน AI editor
- AI video editor ในตลาดมักตั้งสมมติฐานว่าวิดีโอถูกติดป้ายกำกับมาแล้ว แต่คลังจริงกลับกระจัดกระจายด้วยชื่ออย่าง
IMG_*.mov,DJI_*.mp4,Mara june 2024 backup final FINAL - Eddie ค้นหาจากทรานสคริปต์ได้ แต่ไม่สามารถหาฉากอย่าง “ช้างบนเนินในช่วงแสงทอง” จากคลังที่ไม่มีป้ายกำกับได้
- ชื่อไฟล์, โฟลเดอร์แม่, พิกัด GPS, และข้อความทรานสคริปต์ เพียงอย่างเดียวไม่สามารถบอกเนื้อหาภาพอย่าง “ไวด์ช็อตพระอาทิตย์ขึ้นที่มียีราฟอยู่ในเฟรม” ได้
- แรงงัดที่แท้จริงไม่ได้อยู่บนตัว editor แต่อยู่ก่อนหน้านั้น ต้องมีดัชนีที่ทำให้คลังถูกค้นถามเป็นภาษาอังกฤษได้ก่อน
ออกแบบ indexer แบบ local-first
- โครงสร้างโดยรวมคล้ายกับงาน AI-native build ที่ทำให้ลูกค้าใน SimbaStack แต่เพราะเป็นทั้งลูกค้าและวิศวกรเอง การตัดสินใจจึงเร็วมาก
-
ข้อจำกัด 4 ข้อ
- ต้องเป็นแบบ local-first
- คลังของ Mara Hilltop อยู่บน SSD แบบกายภาพ และวิดีโอส่วนตัวอยู่บนโน้ตบุ๊ก การอัปโหลดคลิปขนาดหลาย GB หลายพันรายการขึ้นคลาวด์ไม่เหมาะทั้งด้านต้นทุนและความเป็นส่วนตัว
- ต้องการ ไฟล์ sidecar มากกว่าฐานข้อมูลศูนย์กลาง
- วาง
.description.mdไว้ข้างแต่ละคลิป เพื่อให้ grep กับข้อความธรรมดาได้ - ต่อให้ indexer พังในภายหลัง ไฟล์ก็ยังอยู่ และเมื่อย้ายข้ามไดรฟ์ ข้อมูลก็ย้ายไปพร้อมกัน
- วาง
- ต้องดึงข้อมูลทุกอย่างที่ต้องใช้จากการเรียก vision ครั้งเดียว
- เนื่องจาก vision pass บนเฟรมที่ดึงออกมามีต้นทุนสูง จึงออกแบบสคีมาให้กว้างตั้งแต่แรกเพื่อรวมข้อมูลที่อาจอยากรู้ในภายหลังด้วย
- รายการที่รวมมี rating, technical quality, lighting, time of day, color palette, audio quality, people count, keywords, faces, location, transcript, prose description เป็นต้น
- ต้องเลือกใช้ vision backend ได้ 3 แบบ
- ค่าเริ่มต้นคือ CLI ของ Claude Max subscription ซึ่งไม่มีต้นทุนส่วนเพิ่ม
- เมื่อต้องการความเร็ว ใช้ Anthropic API
- สำหรับงานจำนวนมาก ใช้ local backend ที่ชี้ไปยัง LM Studio และ local backend ตัวนี้คือหัวใจสำคัญ
- ต้องเป็นแบบ local-first
ไปป์ไลน์ประมวลผลต่อคลิป
- อ่านmetadataด้วย
ffprobe - อ่านละติจูด ลองจิจูด และความสูง GPS ด้วย
exiftoolซึ่งทำงานได้เหมือนกันกับวิดีโอจาก iPhone, DJI Pocket, และโดรน - ทำ reverse geocoding ด้วย Nominatim ซึ่งฟรี มีการจำกัดความเร็ว และไม่ต้องใช้ API key
- ใช้
ffmpegดึงเฟรมขนาด 1920px จำนวน 5 เฟรมในช่วงห่างเท่า ๆ กัน - ถอดเสียงด้วย WhisperX รวมถึงการจัดแนวระดับคำและการแยกผู้พูดด้วย pyannote โดยรองรับ 97 ภาษา เช่น Hindi, English, Swahili
- ตรวจจับใบหน้าด้วย
insightfaceและเก็บ ArcFace embedding 512 มิติ ลงในฐานข้อมูลใบหน้า SQLite ส่วนกลาง เพื่อให้ค้นหาบุคคลทั้งคลังได้ภายหลัง - โมเดล vision อ่านเฟรม บางส่วนของทรานสคริปต์ และบริบทของโฟลเดอร์ แล้วส่งกลับเป็น YAML frontmatter และคำอธิบายแบบร้อยแก้ว
- ผลลัพธ์สุดท้ายถูกบันทึกเป็น sidecar
.description.mdข้างคลิป - คลิปจริงของ Mara Hilltop ชื่อ
IMG_1103.MOVไม่สามารถรู้บริบทได้จากชื่อไฟล์ แต่ sidecar ที่ Gemma สร้างมีทั้งการจัดเซ็ตเต็นท์ซาฟารี การแพนกล้องจากภายในออกสู่สะวันนา ประเภทช็อต และกรณีใช้งานอย่าง marketing reel กับ travel vlog B-roll - ในระดับโฟลเดอร์ นอกจาก sidecar ข้างแต่ละคลิปแล้ว ยังสร้าง
_INDEX.jsonและ_INDEX.mdด้านบนไว้ใช้สำหรับ grep เร็ว ๆ และส่งต่อให้ LLM - การทำงานทั้งหมดอยู่ใน Claude Code skill ที่เป็น Python ราว 1,400 บรรทัด โดย Claude Code เขียนให้เป็นส่วนใหญ่ ส่วนมนุษย์ดูแล architecture, prompt, schema design, และ bug triage
โมเดล 31B แบบโลคัลที่รันบน MacBook รุ่นเก่า
- MacBook Pro 16 นิ้ว M1 Max RAM 64GB ที่ซื้อในปี 2021 เดิมไม่ได้ตั้งใจไว้สำหรับ LLM แต่เลือกเพื่อให้เปิด Chrome tabs, DaVinci Resolve, Slack, Discord, และ Drive พร้อมกันได้
- ห้าปีต่อมา โน้ตบุ๊กเครื่องเดิมรัน Gemma 4 31B Q4 บน LM Studio และประมวลผลคลังวิดีโอทั้งปี
- ใน LM Studio โมเดลขนาด 28.40GB ถูกโหลดขึ้นหน่วยความจำ และ REST API ทำงานที่
127.0.0.1:1234 - ระหว่างประมวลผลจำนวนมาก RAM 64GB อย่างเดียวไม่พอ และตาม Activity Monitor ปริมาณสวอปพุ่งขึ้นสูงสุดถึง 50.89GB
- สภาพนี้ไม่ใช่สิ่งที่อยากปล่อยไว้ตลอดวันทำงานปกติ แต่ถือว่ายอมรับได้สำหรับการโหมงานแรง ๆ ช่วงสุดสัปดาห์
- โน้ตบุ๊กจะร้อนและพัดลมหมุนดัง แต่ยังสร้าง sidecar ต่อไปได้ในขณะที่ทำงานอย่างอื่น
- MacBook 16 นิ้ว M1 Max แสดงให้เห็นว่าแม้เป็นฮาร์ดแวร์อายุ 5 ปี ก็ยังมีเผื่อพอจะรันโมเดล 31B parameter ได้ในความเร็วที่ใช้งานได้จริง และหาก local LLM มีประสิทธิภาพขึ้นอีก ก็น่าจะใช้ต่อได้อีก 3~5 ปี
บั๊ก 4 อย่างและบทเรียนที่ได้
-
การเปลี่ยน API ของ speaker diarization ใน WhisperX 3.8
- ใน WhisperX 3.8
whisperx.DiarizationPipelineถูกย้ายไปอยู่ในซับโมดูลwhisperx.diarize - อาร์กิวเมนต์ของ constructor
use_auth_tokenถูกเปลี่ยนเป็นtokenตาม pyannote 3.x - วิธีแก้คือ signature introspection
- สคริปต์จะลอง
token=ก่อน แล้วถ้า constructor ส่งTypeErrorค่อย fallback ไปuse_auth_token= - เวลาต้องเรียกไลบรารี AI ที่เปลี่ยนเร็ว การเรียก constructor แบบป้องกันไว้ก่อนคือประกันราคาถูก
- ใน WhisperX 3.8
-
Claude CLI ส่ง permission error กลับมาเหมือนเป็นผลลัพธ์สำเร็จ
- ในการทดสอบ backend ของ CLI ครั้งแรก sidecar ทั้ง 4 ไฟล์คืนข้อความเดียวกันว่า “I need permission to read the image frames...”
- เนื่องจาก exit code เป็น 0 และ output ไม่ว่าง มันจึงผ่านเช็กความสำเร็จของสคริปต์
- ในโหมด non-interactive ถ้าไม่มี
--permission-mode bypassPermissionsClaude CLI จะคืนข้อความปฏิเสธสิทธิ์เป็น response body แทน prompt - วิธีแก้คือเพิ่มแฟล็กนั้น และเพิ่ม defensive check ที่ถือว่าคำตอบสั้น ๆ ที่มี “I need permission” เป็นข้อผิดพลาด ไม่ใช่คำอธิบาย
- เมื่อนำเครื่องมือ AI ไปใช้ในสคริปต์ ความล้มเหลวแบบเงียบซ่อนอยู่ใน flow การขอสิทธิ์แบบ non-interactive
-
Gemma คืนค่า
people_count: "many"- เนื่องจาก vision prompt สั่งว่า
integer or the string "many" if >10Gemma จึงถือว่าทำตามคำสั่งถูกต้องแล้ว - บั๊กไม่ได้อยู่ที่โมเดล แต่อยู่ที่การออกแบบสคีมา
- หลังแก้แล้ว จึงระบุให้ประมาณค่าเป็นจำนวนเต็ม 0~99 และบังคับแปลงคำตอบ
"many"เดิมใน parser - ฟิลด์ในสคีมาไม่ควรเป็น union แบบ
int หรือ string บางค่าแต่ควรตรึงให้เป็นจำนวนเต็มเสมอหรือสตริงเสมอ เพื่อให้ตัวที่ consume downstream ง่ายขึ้น
- เนื่องจาก vision prompt สั่งว่า
-
คลิปมอเตอร์ไซค์สั่นไหวถูกคัดทิ้งผิดพลาด
- prompt สำหรับ cull รุ่นแรกอิงมาตรฐานพอร์ตโฟลิโอภาพถ่ายมากเกินไป จึงให้คลิปที่มี motion blur หนัก โฟกัสนุ่ม หรือภาพสั่น ได้คะแนนเป็น
cull - คลิปมอเตอร์ไซค์ถือถ่ายกลางคืนระหว่างทริปสเปนก็ถูกจัดเป็นของควรทิ้ง ทั้งที่ความเบลอนั้นเองคือบรรยากาศของความทรงจำ
- เกณฑ์ cull จึงถูกเปลี่ยนจาก “ภาพไม่สมบูรณ์” เป็น “สิ่งที่ไม่ใช่บันทึกจริง”
- สิ่งที่ควรทิ้งจึงแคบลงเหลือคลิปอย่างฝาปิดเลนส์ วิดีโอในกระเป๋า คลิปทดสอบ 2 วินาที หรือภาพที่ overexposed จนใช้ไม่ได้ทั้งหมด
- คลังภาพถ่ายควร cull แบบเข้ม แต่ความทรงจำในวิดีโอควร cull แบบผ่อนปรน และแม้ใช้สคีมาเดียวกันก็ต้องแยกโหมดให้ชัด
- prompt สำหรับ cull รุ่นแรกอิงมาตรฐานพอร์ตโฟลิโอภาพถ่ายมากเกินไป จึงให้คลิปที่มี motion blur หนัก โฟกัสนุ่ม หรือภาพสั่น ได้คะแนนเป็น
ข้อสรุปจากสคีมาแบบมีโครงสร้างและโมเดลโลคัล
-
ข้อจำกัดแบบ enum ช่วยลด hallucination
- Gemma 4 E4B เคยอธิบายรูป coworking-space ที่ถ่ายตอนกลางคืนว่า “brightly lit, abundant natural light, floor-to-ceiling windows” ทั้งที่นอกหน้าต่างมืดสนิท
- แต่เมื่อให้สคีมาแบบมีโครงสร้างกับ 31B และบังคับให้เลือกจาก
golden_hour | bright_daylight | overcast | dim_interior | nighttime | mixed | unclearทั้ง thinking-off และ thinking-on ก็กลับมาตอบnighttime - โมเดลอาจแต่งคำอธิบายเท็จขึ้นมาได้ในร้อยแก้วแบบเปิด แต่ใน enum มันสร้างค่าใหม่ไม่ได้ มีได้แค่เลือกผิด
- สคีมาปลอดภัยกว่าคำสั่ง
-
local 31B กับ structured prompt ช่วยลดช่องว่างกับคลาวด์
- Gemma 4 31B Q4 แบบ thinking-off เมื่อใช้ structured schema ให้ผลลัพธ์กับคลิปทดสอบหลายตัวที่แยกจาก Sonnet 4.6 ได้ยาก
- ส่วนเพิ่มของโมเดลคลาวด์มีคุณค่าในคลิปยาก ๆ ราว 10~20%
- งานจำนวนมากอย่างการทำดัชนีคลิปหลายพันชิ้นข้ามคืนสามารถรันแบบโลคัลได้ แล้วค่อยส่งเฉพาะคลิปที่โลคัลติดป้าย
reviewไปประเมินซ้ำบนคลาวด์ เป็นโครงสร้างสองชั้นที่ขยายได้
-
AI video editor กำลังแข่งกันบนเลเยอร์ที่สูงเกินไป
- เลเยอร์ที่มีค่าจริงไม่ใช่ editor แต่คือดัชนีที่ค้นหาได้
- ถ้าค้นแบบภาษาธรรมชาติได้ว่า “คลิปถือถ่ายในร่มของ Mara, ช่วงแสงทอง, มีคน, ยาวเกิน 8 วินาที” ตัว editor ที่อยู่ด้านบนก็จะง่ายขึ้น
- ตลาด AI editor กำลังแข่งกันบนเลเยอร์ผิวหน้าที่อยู่เหนือดัชนีที่ยังไม่มีจริง และข้าม prerequisite อย่างดัชนีไป
ขั้นถัดไปและข้อจำกัด
- งานถัดไปคือสร้างeditorที่ใช้ Claude Code เป็น orchestrator ใช้ DaVinci Resolve MCP เพื่อตัดคลิป และเพิ่ม voiceover จาก ElevenLabs ให้คลิปเชิงข้อมูล
- voice clone มีข้อจำกัดชัดเจน
- ใช้เฉพาะคอนเทนต์เชิง utility เช่น การบอกทาง คำอธิบายห้อง เวอร์ชันหลายภาษา หรือข้อมูลเชิงข้อเท็จจริงที่ปกติจะพูดเองอยู่แล้ว
- ไม่ใช้กับรีวิวหรือข้อความจากผู้ก่อตั้ง
- ในปี 2026 กฎหมายเกี่ยวกับภาระการเปิดเผยข้อมูลจะเป็นเรื่องจริง และความน่าเชื่อถือของแบรนด์ hospitality สูญเสียได้ง่าย
- เมื่อมีดัชนีแล้ว ก็ไม่จำเป็นต้องนั่ง scrub หาไวด์ช็อตพระอาทิตย์ขึ้นเองจากวิดีโอ DJI Pocket ขนาด 47GB
- ตอนนี้วิดีโอหนึ่งปีของ Mara Hilltop บนโน้ตบุ๊กอายุ 5 ปี กลายเป็นสิ่งที่ค้นถามเป็นภาษาอังกฤษได้แล้ว โดยมีต้นทุนเป็นเวลาช่วงสุดสัปดาห์และสวอป 50GB
- ปีอื่น ๆ ที่เหลืออยู่บน SSD เก่า ๆ คือเป้าหมายของการประมวลผลถัดไป
- ช่องโซเชียลของ Mara Hilltop ยังไม่ได้กลับมามีชีวิตอีกครั้ง
- indexer แก้ได้แค่ปัญหาการหาเจอคลิปที่เหมาะสม
- editor ที่เปลี่ยนมันให้เป็น reel สำเร็จรูปคืออีกครึ่งหนึ่งที่เหลือ และถ้าสำเร็จก็จะมีบทความต่อ แต่ถ้าล้มเหลวก็จะเขียนถึงสาเหตุ
- คำตอบที่ถูกต้องอาจเป็นการจ้างคน
- การหา editor ที่มีเซนส์แบบอบอุ่นและช่างสังเกตให้เข้ากับ Mara Hilltop อาจยากกว่าการเขียน skill เพิ่มอีกตัว
- reel สไตล์ MTV ที่ตัดเร็วเกินไปไม่ใช่ทิศทางที่ต้องการ
- โค้ดเปิดเผยไว้ที่ github.com/Simbastack-hq/framedex และเปิดรับ PR กับ issue อยู่
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ดูเหมือน Claude จะเลือก URL ที่แชร์ตอนเขียนบทความผิด ถ้าโฮมโฟลเดอร์ไม่ได้ถูกเปิดออกสู่ภายนอก
~/.claude/skills/video-index/ก็จะเข้าถึงไม่ได้ เลยสงสัยว่าจะช่วยแชร์ ไฟล์ Skill ได้ไหมอัปเดต: รีบสร้างรีโพนี้ขึ้นมาแล้ว - https://github.com/Simbastack-hq/framedex
ไลเซนส์เป็น MIT และยังไม่ได้ทดสอบอย่างจริงจังหลังทำให้มันใช้งานได้ทั่วไป เดี๋ยวจะกลับไปไล่ดูให้เรียบร้อยและเพิ่มอัปเดตอีก
TODO ใหญ่มีสองอย่างคือ 1) ใช้อินเด็กซ์นี้ร่วมกับความช่วยเหลือของ Claude เพื่อให้ตัดต่อวิดีโอใน DaVinci Resolve ได้เร็วขึ้น 2) ตอนนี้ประมวลผลแค่วิดีโอ แต่จะขยายให้เข้าใจภาพนิ่งหลายพันภาพในกล้องได้ด้วย
ยังไม่ค่อยเข้าใจว่าทำไมต้องมี การสลับหน่วยความจำ เยอะขนาดนั้น พอคิดถึงแบนด์วิดท์หน่วยความจำที่ต้องใช้แล้ว มันอาจทำให้อายุ SSD ลดลงค่อนข้างเร็ว
โมเดล Gemma 4 31B แบบควอนไทซ์ 4 บิตควรจะอยู่ราว ๆ 19GiB มากกว่า 28.4GiB [1] ผมไม่ได้ป้อนภาพบ่อยนัก เลยไม่แน่ใจว่าตอนใส่เข้า context ต้องใช้หน่วยความจำเพิ่มเท่าไร แต่ไม่น่าน่าจะเกิน 10GiB
ดูจาก Activity Monitor แล้ว เหมือนมีทั้ง Handy กับ VM สำหรับ Claude Code ที่โหลดโมเดลอยู่ แถมยังมีแอป Electron หลายตัวเปิดอยู่ด้วย ดังนั้นตัวต้นเหตุน่าจะอยู่ฝั่งนั้นมากกว่า ถ้าโน้ตบุ๊กเริ่มถูดิสก์หนัก ๆ แอปพวกนั้นก็คงค้างและใช้งานไม่ได้อยู่ดี
[1] https://huggingface.co/mlx-community/gemma-4-31b-it-4bit
ถึงอย่างนั้นมันก็ยังกระตุกนิดหน่อย แต่ก็น่าประทับใจที่ยังทำงานอย่างอื่นต่อได้ แม้จะเปิดแท็บไว้เยอะในเบราว์เซอร์ Brave
ไม่แน่ใจว่าคุณรู้ไหมว่าสิ่งนี้มีอยู่แล้ว ค่อนข้างดี และไม่ได้กิน สว็อป 50GB ด้วย
https://github.com/iliashad/edit-mind
เจ๋งดี อยากมีแรมพอสำหรับรันโมเดลในเครื่องเหมือนกัน ช่วงไม่กี่สัปดาห์ที่ผ่านมา ผมเพิ่งทำอะไรคล้ายกันมาก โดยทำเป็นแอป Electron ในเครื่องที่ใช้ Whisper กับ ffmpeg และเพิ่ม semantic search กับ embedding เพื่อคุยกับวิดีโอ
ส่วนการวิเคราะห์ภาพ การแท็ก และการแชตกับวิดีโอ ใช้การติดต่อกับ Claude เลยสงสัยว่าโปรเจกต์นี้ส่งแค่ภาพเดียวหรือเปล่า ของผมใช้ อัลกอริทึมตรวจจับฉาก แบบปรับเองเพื่อหาเฟรมหลายภาพที่ต่างกันในแต่ละวิดีโอ แล้วส่งพร้อมซับไตเติลไปให้ Claude ในคำขอเดียว ตรงนี้เป็นส่วนที่แพงที่สุดแน่นอน ถ้าใช้ Sonnet 4.6 สำหรับวิเคราะห์และ Haiku สำหรับแท็ก จะตกประมาณ 1 ดอลลาร์ต่อวิดีโอความยาว 1 ชั่วโมง และถ้าทำในเครื่องก็น่าจะช้า
แต่จุดอ่อนคือวิธีเลือกเฟรม การตรวจจับฉากน่าจะช่วยได้แน่ และเป็นอันดับหนึ่งในโรดแมป อยากรู้ว่าจะช่วยแชร์วิธีเลือกเฟรมจากการตรวจจับฉากของคุณได้ไหม
ผมเลือกไม่ใส่ vector search และคงความเรียบง่ายไว้ด้วยไฟล์ Markdown ทั่วไปที่พกพาได้มากกว่า ข้อดีคือย้าย SSD แล้วความรู้ก็ย้ายไปกับไฟล์ ไม่มีอินเด็กซ์ให้ต้องซิงก์ และเป็นข้อความธรรมดาที่อยู่ได้นานกว่าเครื่องมือ แต่แนวทางอีกแบบที่คุณพูดมาก็น่าสำรวจเหมือนกัน
ยังมีตัวเลือกดี ๆ อื่นอีก Gemini 3.1 Flash Lite ดีมากสำหรับงานแบบนี้ แต่ไม่ใช่ Gemini 3.5 Flash อันนั้นราคาไม่ค่อยคุ้ม
https://openrouter.ai/google/gemma-4-31b-it
มีคำถามสองข้อ
description.mdมีรายการอย่างfaces -> cluster_idอยู่ อยากรู้ว่ามาจาก face index ของ DaVinci Resolve หรือเปล่า สำหรับคอลเลกชันภาพถ่าย ข้อมูลอย่างใบหน้า+ชื่อ สถานที่ ฯลฯ สำคัญมาก แต่ LLM ทั่วไปจัดการเรื่องพวกนี้ได้ไม่ค่อยดี.description.mdที่วางไว้ข้างวิดีโอแต่ละคลิปทีหลังตอนคุยระดมความคิดกับ Claude เช่น “ฉันอยากทำวิดีโอห้องพักหรูของลอดจ์” ก็สามารถให้มันค้นในไฟล์และรู้ได้ว่าวิดีโอไหนน่าจะช่วยได้
ยังมีไฟล์ระดับรากของโฟลเดอร์ที่รวบรวมคำอธิบายข้อความไว้เพื่อให้ค้นง่ายขึ้นด้วย ผมแปะภาพตัวอย่างไว้ในบล็อกแล้ว - https://blog.simbastack.com/_media/gvcycx2n.png
เรื่องใบหน้าใช้ insightface ตรวจจับด้วย RetinaFace จากแพ็กโอเพนซอร์ส
buffalo_lและรันในเครื่องบน CPU จากนั้นตรวจจับและทำ embedding ใบหน้าจากเฟรมตัวอย่างของแต่ละคลิป แล้วเขียนแถวลงใน~/.framedex/faces.dbพูดตามตรง ส่วนนี้ผมรู้แค่ว่ามันกำลังสะสมอยู่ใน DB ในเครื่อง แต่ยังไม่ได้ทดสอบจริงจังว่ามันทำงานดีแค่ไหน เดี๋ยวจะตรวจให้ละเอียดเร็ว ๆ นี้
มองกว้างกว่านั้น framedex เลยตั้งใจไม่ให้ LLM รับหน้าที่จัดการใบหน้าหรือสถานที่ ใบหน้าถูกจัดการด้วย embedding ของ insightface / ArcFace ทำให้เทียบข้ามคลิปได้แบบชัดเจน ส่วนโมเดลภาพให้แค่จำนวนคนคร่าว ๆ และไม่พยายามระบุว่าเป็นใคร
สถานที่จัดการด้วย EXIF GPS ผ่าน exiftool และ reverse geocoding ของ Nominatim/OpenStreetMap มันเป็นเมทาดาทาที่แน่น ไม่ใช่การเดา
LLM ทำเฉพาะสิ่งที่มันถนัด เช่น คำบรรยายฉาก บรรยากาศ ประเภทช็อต คีย์เวิร์ด และคะแนนเก็บ/ทบทวน/ทิ้ง แม้ส่วนคะแนนสุดท้ายจะยังเถียงกันได้อยู่บ้าง
ผมเคยลองรัน Gemma บน ThinkPad ปี 2015 เพื่อทำงานคล้าย ๆ กัน โชคดีที่อัปเกรดหน่วยความจำได้ ไม่งั้นคงทรมานพอตัว
จะไม่โกหกเลย พอรัน llama.cpp แล้วพัดลมหมุนเต็มสปีด แต่ถึงอย่างนั้นมันก็ทำงานได้และงานก็เสร็จ
บางครั้งดูเหมือนใช้เป็นอุปมาเรื่อง “ใช้ทรัพยากร 100%” และในที่นี้ก็น่าจะหมายถึงแบบนั้น แต่ในบริบทอื่นก็คงมีคนพูดเป็นข้อบ่นจริง ๆ อยู่เหมือนกัน
ผมว่าเจ้าของที่พักบน Airbnb ส่วนใหญ่คงไม่เห็นด้วยกับคำพูดที่ว่า “วิดีโอ Generative AI ไม่มีที่ยืนในแบรนด์ท่องเที่ยวของจริง”
ส่วนคำว่า “ถูกตรึงกางเขนบน TripAdvisor” ผมเองก็ไม่เข้าใจจริง ๆ ว่าโฮสต์ Airbnb ที่ลงที่พักปลอมรอดมาได้อย่างไร
ขณะเดียวกัน วิดีโอจริงก็ใช้เวลาและทำให้ทั้งกระบวนการช้าลง
ผมมองว่าแอป AI แบบ B2C มีข้อจำกัดเชิงโครงสร้าง เพราะสร้าง บริบทที่ปรับให้เป็นส่วนตัว ได้ยาก
ถ้ามีโมเดลในเครื่องที่เก่งพอจะเก็บบริบท ค้นคว้า แท็ก ฯลฯ แบบตั้งต้นในสเกลใหญ่ได้ นี่อาจเป็นจุดเปลี่ยนสำคัญ
ถ้าใส่สกรีนช็อตหลายภาพเข้าไป มันจะพยายามตั้งชื่ออย่างฉลาดตามสิ่งที่อยู่ในนั้น เช่นเดียวกับวิดีโอ PDF และอื่น ๆ
แต่ก็อย่างที่คุณว่า ผมไม่ได้พยายามเก็บเงินเลย เพราะรู้สึกว่าเดี๋ยว Apple ก็คงใส่มาเป็นฟีเจอร์เอง
https://finalfinalreallyfinaluntitleddocumentv3.com/
แต่ผมคิดว่าอีกไม่นาน พอเอเจนต์ฉลาดพอ เพื่อนที่ไม่ใช่สายเทคนิคก็แค่พูดว่า “ช่วยจัดระเบียบวิดีโอในโฟลเดอร์นี้ให้ฉันเข้าใจได้หน่อย” แล้วมันจะทำให้ได้เลย