YouTube-to-Markdown cho Obsidian: Lấy transcript, metadata, chapters về Markdown

ByNgọc Trai MKT09/09/2026in GitHub Tools 0
youtube-fetcher-to-markdown

Bạn xem một video YouTube dài 60 phút, nhưng chỉ cần giữ lại vài ý chính trong Obsidian. Nếu mở transcript và bôi đen thủ công, bạn mất thời gian dọn dòng, lại hay bỏ sót ngày đăng, kênh, duration. YouTube-to-Markdown cho Obsidian – repo JimmySadek/youtube-fetcher-to-markdown – tự động tạo file Markdown có YAML frontmatter, chapters, toàn bộ transcript, không cần API key.

Thank you for reading this post, don't forget to subscribe!

Script này không cạnh tranh với plugin phát video. Nó giải quyết nửa pipeline còn thiếu: chuyển nội dung YouTube thành văn bản có cấu trúc để bạn đọc lại, tìm kiếm, hoặc đưa vào ChatGPT và agent như Claude Code tóm tắt. Nếu bạn đang dùng Obsidian để xây dựng hệ thống ghi chú, đây là mảnh ghép đáng thử.

Cài skill qua npx và chạy lần đầu cần chuẩn bị gì?

Theo repository chính thức, bạn cần Python 3.8 trở lên và hai dependency: youtube-transcript-api, requests. Cài skill bằng lệnh npx skills add JimmySadek/youtube-fetcher-to-markdown, rồi kiểm tra bằng --check-deps.

Chưa dùng Claude Code? Bạn vẫn dùng được script Python độc lập. Sau khi cài, đường dẫn script nằm trong ~/.config/skillshare/skills/youtube-fetcher/. Muốn lấy cả description và chapters, cài thêm yt-dlp qua pip hoặc brew.

  1. Mở terminal, chạy npx skills add JimmySadek/youtube-fetcher-to-markdown.
  2. Cài dependency bằng pip: pip install youtube-transcript-api requests.
  3. Kiểm tra: python3 .../fetch_transcript.py --check-deps.
  4. Chạy với URL video: python3 .../fetch_transcript.py "URL_YouTube".

File tạo ra nằm trong thư mục ~/yt_transcripts/. Tên file thường có dạng YYYY-MM-DD_tieu-de-slug_[videoID].md.

Cài skill qua npx và chạy lần đầu cần chuẩn bị gì?

Vì sao chọn skill này thay vì copy-paste transcript thủ công?

Vì transcript là một khối text dài, còn bối cảnh của nó nằm ở metadata. Một video dài 60 phút có thể cho transcript khoảng 9.000 từ; dán tay vào Obsidian mất nhiều phút và dễ quên language, upload_date, chapters, trong khi script ghi đủ các trường này vào frontmatter chỉ sau vài giây.

Khi bạn xây dựng kho tri thức cá nhân từ YouTube, cách làm thủ công không theo kịp. Nếu cần đưa 50 video về một chủ đề vào vault, mỗi video mất 15 phút dọn dẹp thì bạn đã mất hơn 12 giờ. Skill này lặp lại cùng một thao tác, không bỏ sót metadata.

Transcript thô từ web thường không có YAML frontmatter. Khi đã có frontmatter, plugin Dataview đọc được ngay để lọc theo kênh, ngôn ngữ, thời lượng. Bạn cũng có thể nối tiếp pipeline: dùng file Markdown này làm input cho ChatGPT hoặc một agent khác, thay vì để agent đọc trang YouTube đầy quảng cáo và link gợi ý.

File Markdown nhận về sắp xếp metadata, chapters, transcript theo cấu trúc nào?

File có ba phần: YAML frontmatter ở đầu, metadata dạng bảng kèm description và chapters ở giữa, transcript ở cuối. Cấu trúc này gần với tài liệu Obsidian tiêu chuẩn, nên Dataview, Advanced Table và các agent đọc Markdown đều xử lý được.

Frontmatter gồm hơn 10 trường: title, channel, url, video_id, fetched, source_project, language, caption_type, duration, upload_date, tags. Khi mở file trong Obsidian, các trường này hiện trong Properties. Phần bảng mô tả video hữu ích khi bạn muốn xem nhanh thông tin mà không cuộn xuống transcript.

Nếu thường xuyên sửa bảng, hãy cài plugin Advanced Table để thêm dòng, thêm cột mà không phá vỡ Markdown. Còn nếu muốn xem video ngay bên cạnh ghi chú, plugin Media Extended giúp nhúng YouTube trong Obsidian. Media Extended mạnh về xem lại phân đoạn; việc tạo transcript thành file vẫn thuộc về skill này. Hai plugin bổ sung cho nhau.

File Markdown nhận về sắp xếp metadata, chapters, transcript theo cấu trúc nào?

Dùng –timestamps, –lang và –format json/srt cho nhu cầu nào?

Ba cờ này đổi định dạng đầu ra chứ không đổi nguồn dữ liệu. --timestamps thêm mốc [MM:SS] vào mỗi dòng; --lang chọn ngôn ngữ phụ đề; --format json/srt xuất dữ liệu có cấu trúc cho máy đọc, không chỉ cho người xem.

Bạn đang nghiên cứu và cần trích dẫn đúng đoạn trong video. Dùng --timestamps, mỗi câu đều có mốc thời gian để quay lại kiểm chứng. Câu lệnh:

python3 fetch_transcript.py "URL" --timestamps

Với video đa ngôn ngữ, --lang es lấy phụ đề tiếng Tây Ban Nha; gõ --list để xem danh sách ngôn ngữ có sẵn. --format srt xuất phụ đề SubRip cho trình edit video. --format json giữ nguyên phân đoạn, dễ đưa vào script hoặc gửi ChatGPT để tóm tắt; thêm --stdout để pipe sang lệnh khác.

Dùng --timestamps, --lang và --format json/srt cho nhu cầu nào?

Vì sao transcript YouTube không thay thế được Whisper với video thiếu phụ đề?

Vì script này chỉ đọc caption YouTube, không nghe audio. Video không có phụ đề tay hoặc auto-generated sẽ báo lỗi và không tạo được file. Lúc đó cần một tầng xử lý khác như Whisper để sinh transcript từ âm thanh.

Nếu gặp video không caption, hãy tách audio và chạy Whisper. Sau khi có transcript, bạn có thể đặt cạnh file metadata của skill này nếu video có sẵn phụ đề, hoặc tự thêm frontmatter thủ công.

Ngay cả video có phụ đề tự động, transcript vẫn có lỗi nhận dạng tên riêng, thuật ngữ. Với ghi chú cá nhân để tra cứu thì chấp nhận được; với nội dung xuất bản, nên đối chiếu video gốc trước khi dùng.

Vì sao transcript YouTube không thay thế được Whisper với video thiếu phụ đề?

So sánh YouTube-Fetcher-to-Markdown với Obsidian Web Clipper, Media Extended và cách làm tay

Bốn cách tiếp cận không loại trừ nhau. Cách bạn chọn phụ thuộc nguồn nội dung: video YouTube, trang web, hay ghi chú trong lúc xem. Bảng dưới đây giúp xác định công cụ nào đảm nhận phần nào trong pipeline.

Tiêu chí YouTube-Fetcher-to-Markdown Obsidian Web Clipper Media Extended Copy-paste thủ công
Nhiệm vụ chính Lấy transcript, metadata, chapters thành file .md Lưu trang web thành Markdown từ trình duyệt Nhúng video và ghi chú theo timestamp Dán nội dung vào ghi chú
Transcript tự động Có, từ phụ đề YouTube Không trích transcript Không tạo file transcript Không
YAML frontmatter Có, hơn 10 trường Có thể cấu hình Không tập trung Tự tạo
API key Không cần Không cần Không cần Không cần
Phù hợp nhất Xử lý nhiều video, xây kho tài liệu Lưu bài viết web dài Học trực tiếp từ video trong vault Video ngắn, thỉnh thoảng mới ghi chú

Obsidian Web Clipper phù hợp khi gặp một bài viết web dài, không phải khi cần transcript video. Media Extended phù hợp khi muốn xem video trong vault và ghi chú theo từng mốc, nhưng nó không tạo transcript dạng text. Skill này sinh ra để xử lý transcript và metadata một cách có hệ thống.

Nếu nhìn rộng hơn, Obsidian thường được dùng như một documentation system local-first. Notion hoặc Trello phù hợp team cần Kanban, comment tập trung; với dữ liệu Markdown local, bạn dễ dàng chuyển sang website bằng NextJS hoặc HTML tĩnh, hoặc tạo slide từ Markdown bằng Marp. Khi đó transcript YouTube không chỉ nằm trong vault mà còn có thể xuất bản thành tài liệu dùng chung.

3 lỗi thường gặp khi chạy script và cách xử lý

Ba lỗi phổ biến là không lấy được transcript, thiếu dependency và file trùng tên. Mỗi lỗi đều có exit code, nên bạn có thể tự động hóa xử lý trong CI.

1. Video không có transcript hoặc báo lỗi TranscriptsDisabled

Mở YouTube, xem thử tab transcript có nội dung không. Nếu video có phụ đề nhưng script vẫn lỗi, thử thêm --lang en. Nếu không có transcript nào, dùng Whisper.

2. Lỗi thiếu dependency khi chạy –check-deps

--check-deps in đúng tên package còn thiếu. Cài đủ youtube-transcript-api, requests; nếu muốn description và chapters, cài thêm yt-dlp.

3. File không ghi vì trùng video_id

Script trả exit code 3 khi thấy file đã tồn tại. Dùng --force để tải lại, hoặc --output để lưu vào thư mục khác. Đây là tính năng chống trùng chứ không phải lỗi nghiêm trọng.

3 lỗi thường gặp khi chạy script và cách xử lý

Câu hỏi thường gặp về YouTube-to-Markdown cho Obsidian

Dưới đây là bốn thắc mắc xuất hiện nhiều nhất khi tích hợp skill này vào Obsidian, từ API key cho tới pipeline CI/CD.

Tôi có cần API key YouTube không?

Không. Script lấy phụ đề qua thư viện youtube-transcript-api và lấy metadata qua oEmbed hoặc yt-dlp, tất cả đều dùng dữ liệu công khai. Bạn không cần tạo project trên Google Cloud, không cần nhập key vào file cấu hình.

Video không phụ đề tự động thì xử lý sao?

Script sẽ thông báo không tìm thấy transcript. Bạn nên tải audio về và chạy Whisper, sau đó biên tập lại. Nếu video có phụ đề tự động, bạn vẫn dùng được transcript, nhưng hãy kiểm tra các thuật ngữ quan trọng trước khi trích dẫn.

Chạy trên Windows được không?

Được. Cài Python 3.8+ và chọn Add to PATH khi cài đặt. Dùng pip install youtube-transcript-api requests, không cần brew. Đường dẫn file output vẫn là ~/yt_transcripts/; nếu dùng PowerShell, đường dẫn hiển thị có thể khác một chút nhưng hoạt động tương tự.

Tích hợp pipeline CI/CD bằng cách nào?

Script dùng exit code chuẩn: 0 là thành công, 1 là lỗi chung, 2 là thiếu dependency, 3 là trùng file. Bạn có thể chạy --format json --stdout và đưa output vào bước xử lý tiếp theo mà không cần đọc file tạm. Hỗ trợ --force để cập nhật transcript mới.

Bài viết được hiệu đính bởi đội ngũ ngoctraimkt.com – chuyên về Obsidian, quản lý tri thức và automation. Nội dung dựa trên repo mã nguồn mở JimmySadek/youtube-fetcher-to-markdown và các tài liệu chính thức của Obsidian, Dataview, yt-dlp.

Related Posts