สร้าง AI Agent สรุปวิดีโอและพอดแคสต์ออฟไลน์: สกัดประเด็นสำคัญและ Action Items จากไฟล์เสียงด้วย Python + Ollama
เปลี่ยนการนั่งฟังพอดแคสต์และวิดีโอบรรยายยาวหลายชั่วโมงให้กลายเป็นสรุปประเด็นหลักและ Action Items อัตโนมัติ ส่งตรงเข้า Obsidian แบบออฟไลน์ 100% ด้วย Whisper และ Ollama
ในแต่ละสัปดาห์เรามักจะบันทึกวิดีโอบรรยาย สัมมนาออนไลน์ หรือพอดแคสต์ความรู้เก็บไว้มากมาย แต่ปัญหาคลาสสิกที่ทุกคนเจอคือ "ไม่มีเวลาเปิดฟังจนจบ" หรือแม้จะฟังจบแล้ว ข้อมูลความรู้เหล่านั้นก็มักจะเลือนหายไปโดยไม่ได้ถูกย่อยและเชื่อมโยงเข้ากับระบบ Second Brain ของเรา
แทนที่จะต้องนั่งฟังคลิปความยาว 1-2 ชั่วโมงแล้วคอยกดหยุดเพื่อจดโน้ตทีละประโยค เราสามารถสร้าง AI Agent สรุปสื่อเสียงและวิดีโออัตโนมัติ (Media Summarizer Agent) ที่ทำงานบนเครื่องตัวเอง ประมวลผลแบบ Offline 100% ทั้งปลอดภัยและไม่ต้องเสียค่าบริการคลาวด์รายเดือน
สถาปัตยกรรมของ Media Summarizer Agent
การทำงานของระบบ Cognitive Automation ตัวนี้แบ่งออกเป็น 3 ขั้นตอนหลัก:
- Audio Extraction & Transcription (สกัดเสียงและถอดความ): ใช้
yt-dlpเพื่อดึงเสียงจากไฟล์วิดีโอ/ลิงก์ และใช้faster-whisperในเครื่องแปลงเสียงพูดให้กลายเป็นข้อความดิบ (Transcript) - Cognitive Synthesis (ย่อยและสังเคราะห์สาระสำคัญ): ส่งข้อความถอดเสียงเข้าโมเดล LLM ในเครื่องผ่าน
Ollamaเพื่อจัดหมวดหมู่ แยกประเด็นสำคัญ, ข้อคิดเด่น, และ Action Items - Obsidian Integration (จัดเก็บบันทึกอัตโนมัติ): สร้างไฟล์ Markdown พร้อม Frontmatter ที่สมบูรณ์แบบลงในคลังโน้ต Obsidian ทันที
สิ่งที่ต้องเตรียมก่อนเริ่มสร้าง
ตรวจสอบให้แน่ใจว่าเครื่องของคุณติดตั้งเครื่องมือพื้นฐานเหล่านี้เรียบร้อยแล้ว:
- Ollama: พร้อมดาวน์โหลดโมเดลภาษา เช่น
llama3.1:8bหรือqwen2.5:7b - Python 3.10+
- FFmpeg: สำหรับจัดการไฟล์มีเดีย
- ไลบรารี Python:
pip install faster-whisper ollama yt-dlp
โค้ด Python สำหรับสร้าง Agent
สร้างไฟล์ชื่อ media_summarizer.py แล้วใส่โค้ดการทำงานต่อไปนี้:
import os
import sys
from pathlib import Path
from datetime import datetime
import ollama
from faster_whisper import WhisperModel
# กำหนดเส้นทางโฟลเดอร์ของ Obsidian Vault
OBSIDIAN_VAULT = Path("/home/linn/Documents/Obsidian/SecondBrain/Media-Notes")
MODEL_NAME = "llama3.1:8b"
def transcribe_audio(audio_path: str) -> str:
print(f"[*] กำลังถอดความเสียงจาก: {audio_path}")
# ใช้โมเดล whisper base หรือ small เพื่อความเร็วในการรันบนเครื่อง
model = WhisperModel("small", device="auto", compute_type="int8")
segments, _ = model.transcribe(audio_path, language="th")
full_text = []
for segment in segments:
full_text.append(segment.text)
return " ".join(full_text)
def summarize_with_ollama(transcript: str, media_title: str) -> str:
print(f"[*] กำลังสังเคราะห์ประเด็นด้วย Ollama ({MODEL_NAME})...")
system_prompt = (
"คุณคือผู้เชี่ยวชาญด้าน Knowledge Management และการจัดทำ Literature Note "
"หน้าที่ของคุณคือวิเคราะห์ Transcript จากวิดีโอหรือพอดแคสต์ แล้วสรุปเป็นภาษาไทย "
"โครงสร้างสรุปต้องกระชับ ตรงประเด็น และเน้นนำไปปฏิบัติตามได้จริง"
)
user_prompt = f"""
ช่วยสรุปเนื้อหาจาก Transcript ต่อไปนี้:
หัวข้อสื่อ: {media_title}
เนื้อหา:
{transcript[:12000]} # ตัดช่วงความยาวให้พอดีกับบริบท
กรุณาจัดรูปแบบผลลัพธ์เป็น Markdown ตามโครงสร้างนี้:
### 🎯 สรุปภาพรวมใน 3 ประโยค
### 💡 ประเด็นสำคัญ (Key Insights)
- บุลเล็ตสรุปแนวคิดหลัก
### 🛠️ สิ่งที่นำไปปรับใช้ได้ทันที (Action Items)
- [ ] การกระทำที่ชัดเจน
### 💬 วาทะ/ข้อความเด่นที่น่าสนใจ (Memorable Quotes)
"""
response = ollama.chat(
model=MODEL_NAME,
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_prompt}
],
options={"temperature": 0.3}
)
return response["message"]["content"]
def save_to_obsidian(title: str, summary_content: str, source_path: str):
OBSIDIAN_VAULT.mkdir(parents=True, exist_ok=True)
slug = title.lower().replace(" ", "-")[:40]
filename = OBSIDIAN_VAULT / f"media-{slug}.md"
today = datetime.now().strftime("%Y-%m-%d")
note_content = f"""---
title: "{title}"
date: "{today}"
type: "literature-note"
category: "Media Summary"
tags: ["podcast", "video", "cognitive-automation", "second-brain"]
source: "{source_path}"
---
# {title}
{summary_content}
---
*บันทึกนี้สร้างขึ้นอัตโนมัติด้วย Local Media Summarizer Agent เมื่อ {today}*
"""
filename.write_text(note_content, encoding="utf-8")
print(f"[+] บันทึกไฟล์เรียบร้อยแล้วที่: {filename}")
def main():
if len(sys.argv) < 2:
print("วิธีใช้: python media_summarizer.py <ไฟล์เสียงหรือวิดีโอ> [ชื่อหัวข้อ]")
sys.exit(1)
media_file = sys.argv[1]
title = sys.argv[2] if len(sys.argv) > 2 else Path(media_file).stem
# 1. ถอดเสียง
transcript = transcribe_audio(media_file)
# 2. ย่อยข้อมูลด้วย LLM
summary = summarize_with_ollama(transcript, title)
# 3. บันทึกลง Obsidian
save_to_obsidian(title, summary, media_file)
if __name__ == "__main__":
main()
วิธีนำไปประยุกต์ใช้งานในชีวิตประจำวัน
- สรุปไฟล์บันทึกการสอนหรือสัมมนา: เพียงดาวน์โหลดไฟล์เสียง mp3/mp4 แล้วสั่งรัน:
bash python media_summarizer.py lecture_ai_future.mp3 "ทิศทาง AI ในปี 2026" - ผสานเข้ากับ Watch Folder: คุณสามารถตั้งค่าสคริปต์ให้คอยเฝ้าโฟลเดอร์
~/Podcasts/Inboxเมื่อใดก็ตามที่มีการวางไฟล์เสียงใหม่ลงไป Agent จะทำการถอดเสียงและส่งบันทึกสรุปเข้า Obsidian ให้ทันทีในเบื้องหลัง - เชื่อมโยงเข้ากับ MOC: เมื่อโน้ตถูกส่งเข้า Obsidian แล้ว เราสามารถใช้ปลั๊กอิน Dataview หรือระบบ Bi-directional Link เชื่อมโยงไอเดียใหม่นี้เข้ากับ MOC ด้านความรู้ที่เกี่ยวข้องได้อย่างง่ายดาย
บทสรุป
การสร้าง Cognitive Automation ไม่ใช่การปล่อยให้ AI มาคิดแทนเราทั้งหมด แต่คือการ "ลดภาระงานส่วนเกิน (Cognitive Overhead)" ในการรับข้อมูลดิบ เพื่อให้สมองของเรามีพื้นที่และพลังงานเหลือสำหรับ การคิดวิเคราะห์เชิงลึก การตั้งคำถาม และการสร้างสรรค์ผลงานใหม่
ด้วยพลังของ Whisper + Ollama + Python คุณสามารถมีผู้ช่วยสรุปสื่อส่วนตัวที่ทำงานรวดเร็ว ไร้ขีดจำกัด และรักษาความลับของทุกสิ่งที่คุณรับฟังไว้อย่างปลอดภัย 100% บนเครื่องของคุณเอง