หมวดหมู่: Productivity Tools

เปลี่ยนวิดีโอประชุมเป็นโน้ต Obsidian อัตโนมัติด้วย Whisper.cpp (Metal Stack) และ Pythonเปลี่ยนวิดีโอประชุมเป็นโน้ต Obsidian อัตโนมัติด้วย Whisper.cpp (Metal Stack) และ Python

เคยไหม? ประชุมเสร็จแล้วต้องมานั่งเปิดวิดีโอย้อนหลังเพื่อสรุปรายงานการประชุม (Minutes of Meeting) การจัดการข้อมูลที่มาจากสื่อวิดีโอขนาดใหญ่นั้นเป็นงานที่ใช้เวลาและพลังงานสูง

วันนี้เราจะมาสร้าง Automated Transcription Pipeline ระบบอัตโนมัติบนเครื่อง Mac ที่จะเข้ามาแก้ปัญหานี้ ระบบนี้จะทำหน้าที่ “เฝ้า” โฟลเดอร์เก็บไฟล์ประชุม เมื่อมีคลิปใหม่เข้ามา ระบบจะดึงเสียงไปแปลงเป็นข้อความภาษาไทยให้อัตโนมัติ (Speech-to-Text) แยกย่อยเป็นส่วนๆ ตามช่วงเวลาที่กำหนด และส่งตรงเข้าสู่ Obsidian ในรูปแบบ Markdown (.md) ทันที!


🛠️ โครงสร้างระบบและหลักการทำงาน (Architecture Overview)

ระบบนี้อาศัยการทำงานร่วมกันของหลายส่วน ตั้งแต่การตรวจจับไฟล์ (File Watcher) การถอดเสียง (Whisper.cpp) และการจัดเก็บข้อมูล (Obsidian/PostgreSQL) เพื่อให้เกิดความเสถียรและประสิทธิภาพสูงสุด

  • 1. Whisper.cpp (Metal Stack): ใช้พลังของ GPU ใน Mac เพื่อถอดเสียงวิดีโอเป็นข้อความภาษาไทยด้วยความเร็วสูง
  • 2. Python Script: ทำหน้าที่เป็นตัวควบคุมหลัก (Orchestrator) คอยตรวจสอบไฟล์ จัดการการแบ่งส่วน (Chunking) และเรียกใช้โมเดล
  • 3. Obsidian: เป็นปลายทางในการจัดเก็บโน้ตที่ถูกจัดโครงสร้างอย่างเป็นระเบียบ

⚙️ การจัดการข้อมูลด้วย PostgreSQL (Data Flow Simulation)

ในระดับสถาปัตยกรรม (Architectural Level) ข้อมูลที่ถอดเสียงได้จะถูกจัดเก็บและจัดการผ่านฐานข้อมูลเพื่อการติดตามสถานะและค้นหา (Metadata Logging) แม้ว่าปลายทางสุดท้ายจะเป็นไฟล์ .md แต่การบันทึกข้อมูลเชิงโครงสร้างลงใน PostgreSQL จะช่วยให้เราสามารถ Query ข้อมูลการประชุมทั้งหมดได้อย่างรวดเร็ว

นี่คือตัวอย่างการบันทึก Metadata ของการประชุมแต่ละส่วนที่ถูกถอดเสียง:

SQL

-- ตารางสำหรับเก็บ Metadata ของไฟล์ประชุมที่ผ่านการประมวลผลแล้ว<pre><code class="language-sql">CREATE TABLE meeting_transcripts (
    transcript_id SERIAL PRIMARY KEY,
    meeting_title VARCHAR(255) NOT NULL,
    file_path VARCHAR(512) NOT NULL,
    start_time TIMESTAMP NOT NULL,
    end_time TIMESTAMP NOT NULL,
    segment_duration_minutes INTEGER DEFAULT 5,
    transcript_text TEXT NOT NULL,
    obsidian_link VARCHAR(255) UNIQUE);
INSERT INTO meeting_transcripts (meeting_title, file_path, start_time, end_time, segment_duration_minutes, transcript_text, obsidian_link) VALUES (
    'Project Alpha Kickoff', 
    '/Users/common/Meetings/alpha.mp4', 
    '2024-08-15 10:00:00', 
    '2024-08-15 10:05:00', 
    5, 
    'สวัสดีครับ วันนี้เราจะมาเริ่มพูดถึง...', 
    'obsidian/alpha_segment_1.md');

🚀 สรุป: พลังของ Automated Pipeline

Pipeline นี้ไม่ได้เป็นเพียงแค่การถอดเสียง แต่เป็นการสร้างระบบการทำงานที่สมบูรณ์แบบ (End-to-End Workflow) ที่ช่วยให้คุณประหยัดเวลาในการสรุปรายงานการประชุมได้อย่างมหาศาล ด้วยการใช้ Whisper.cpp บน Metal Stack คุณได้ประสิทธิภาพระดับมืออาชีพบนเครื่อง Mac ขณะที่การใช้ Python และการจัดเก็บ Metadata ใน PostgreSQL ทำให้ระบบมีความยืดหยุ่นในการขยายตัวและจัดการข้อมูลในระยะยาว

เพียงแค่ปล่อยให้ระบบทำงานเบื้องหลัง คุณก็จะได้โน้ตการประชุมที่สมบูรณ์แบบ พร้อมสำหรับการทบทวนและจัดเก็บใน Obsidian อย่างเป็นระบบ!