Xây dựng hệ thống biến kênh YouTube thành podcast bằng yt-dlp, ffmpeg và Backblaze B2

07 tháng 4, 2026·5 phút đọc

Bài viết giới thiệu cách tạo một pipeline tự động chuyển đổi nội dung YouTube thành các feed podcast chuẩn RSS sử dụng yt-dlp, ffmpeg và dịch vụ lưu trữ Backblaze B2. Giải pháp tiết kiệm chi phí và vận hành trên máy người dùng, đồng thời hỗ trợ phát triển các danh mục podcast mới từ các nguồn như cuộc gọi báo cáo tài chính hoặc sách nói.

Xây dựng hệ thống biến kênh YouTube thành podcast bằng yt-dlp, ffmpeg và Backblaze B2

Xây dựng hệ thống biến kênh YouTube thành podcast bằng yt-dlp, ffmpeg và Backblaze B2

YouTube sở hữu lượng lớn nội dung âm thanh giá trị như các buổi gọi báo cáo tài chính, bài giảng đại học, sách nói, bài diễn thuyết... nhưng rất tiếc, hầu như không có hình thức phát dưới dạng podcast, khiến người dùng không thể đăng ký nhận tự động qua Apple Podcasts hay các ứng dụng podcast khác.

Để giải quyết vấn đề này, nhóm phát triển đã sáng tạo ra Castify – một hệ thống giúp biến các kênh và playlist YouTube trở thành feed podcast chuẩn RSS thực thụ. Bạn chỉ cần cung cấp URL kênh, hệ thống sẽ tự động quét video mới, trích xuất âm thanh, upload lên lưu trữ đám mây và tạo RSS hoàn chỉnh dùng được ở mọi ứng dụng podcast.

Kiến trúc hệ thống

Hệ thống gồm 3 thành phần chính:

  • Desktop app (Tauri v2 + Rust): Thực hiện các bước quét, tải video, trích xuất và upload âm thanh. Chạy hoàn toàn trên máy người dùng bằng cách gọi yt-dlp và ffmpeg dưới dạng sidecar binaries.
  • Go server (chi router, GORM, MySQL): Cung cấp API quản lý các feed và tập tin podcast, sinh file RSS XML theo chuẩn iTunes, đồng thời cấp các URL upload và download từ Backblaze B2.
  • Backblaze B2: Dịch vụ lưu trữ dữ liệu giá rẻ (khoảng 0.005 USD/GB/tháng) dùng để chứa các file âm thanh.

Điểm khác biệt lớn là công việc trích xuất âm thanh diễn ra trên máy người dùng thay vì server, giúp giảm thiểu chi phí vận hành và tránh việc chạy yt-dlp trong môi trường đám mây.

Bước 1: Quét video mới

Khi người dùng thêm một kênh YouTube, ứng dụng gọi yt-dlp với chế độ --flat-playlist để nhanh chóng lấy metadata các video (ID, tiêu đề, ngày tải lên, độ dài, số lượt xem) mà không tải video về.

Những video này được lọc bỏ các dạng Shorts, livestream, và video không công khai, đồng thời so sánh với dữ liệu hiện có trong database để phát hiện video mới cần tải xuống.

Bước 2: Tải về và trích xuất âm thanh

Các job tải âm thanh được quản lý theo hàng đợi ưu tiên (cấp độ ưu tiên cao → trung bình → thấp) với giới hạn số tác vụ song song nhằm tránh quá tải.

Quá trình tải sử dụng yt-dlp để tách âm thanh từ video, lưu file tạm định dạng M4A. Sau đó ffmpeg sẽ chuẩn hóa file này thành mono, bitrate 48 kbps, chuẩn AAC giúp giảm dung lượng xuống còn khoảng 24MB cho mỗi giờ âm thanh mà vẫn đủ chất lượng nghe tốt cho các nội dung nói.

Hệ thống cũng áp dụng nhiều chiến thuật khác nhau để vượt qua các biện pháp chống bot từ YouTube như đổi client giả lập (web, android) hoặc dùng cookie trình duyệt cho nội dung cần xác thực.

Bước 3: Upload âm thanh lên Backblaze B2

Sau khi có file âm thanh hoàn chỉnh, ứng dụng gửi request lấy URL upload có chữ ký (presigned URL) từ server rồi upload trực tiếp lên Backblaze B2, tuân thủ các header bắt buộc và kiểm tra checksum SHA-1.

Nếu B2 quá tải, hệ thống sẽ tự động thử lại upload nhiều lần theo thuật toán exponential backoff, trong khi vẫn lấy lại URL mới cho mỗi lượt retry theo khuyến cáo.

Sau thành công, trạng thái tập tin trên server chuyển sang ready.

Bước 4: Sinh feed RSS động

Server Go sinh file RSS XML tuân thủ chuẩn iTunes ngay khi có yêu cầu từ ứng dụng podcast, bao gồm đầy đủ metadata của feed và các episodes đã chuẩn bị sẵn, với liên kết audio dẫn thẳng tới Backblaze B2 qua URL ký bảo mật.

Đường dẫn feed hiển thị ở dạng /rss/{slug}.xml giúp các ứng dụng Apple Podcasts, Pocket Casts, Overcast... có thể đăng ký và tự động tải nội dung.

Những sản phẩm tạo ra với pipeline này

  • 500 kênh thu âm báo cáo tài chính S&P 500: Tự động cập nhật các buổi gọi báo cáo tài chính quý của hàng trăm công ty lớn như Apple, NVIDIA, JPMorgan để người dùng đăng ký và nghe như podcast.
  • Sách nói công cộng: Thể loại sách đọc bởi LibriVox được đóng gói lại thành các feed podcast có thứ tự chapter chính xác.
  • Bất kỳ kênh YouTube nào: Người dùng có thể dễ dàng biến kênh YouTube yêu thích của mình thành feed podcast chỉ với vài cú click trên desktop app.

Bài học kinh nghiệm

  • Đóng gói toàn bộ phụ thuộc: Các công cụ yt-dlp, ffmpeg và Deno được đính kèm làm sidecar binaries theo từng nền tảng nhằm tránh phụ thuộc vào hệ thống người dùng.
  • Chi phí trích xuất audio rất thấp: Lưu trữ tập tin M4A chuẩn AAC mono bitrate 48 kbps tốn khoảng 6MB/giờ âm thanh, làm giảm chi phí lưu trữ gần như không đáng kể dù có hàng trăm feed.
  • yt-dlp hay bị đứt quãng: YouTube thay đổi liên tục khiến việc giữ yt-dlp hoạt động phải chỉnh sửa liên tục, cần dự phòng chi phí bảo trì.
  • Quản lý queue ưu tiên quan trọng: Download các tập tin mới của user cần ưu tiên hơn các job đồng bộ nền nhằm tăng tốc phản hồi.

Tóm tắt stack công nghệ

Thành phầnCông nghệ
Desktop appTauri v2, Rust, React 19
ServerGo 1.22, chi, GORM, MySQL
Trích xuất âm thanhyt-dlp + ffmpeg (sidecar binaries)
Lưu trữ đối tượngBackblaze B2
Feed RSSXML chuẩn iTunes, sinh động

Nếu bạn quan tâm đến các feed báo cáo tài chính hay sách nói miễn phí, hãy khám phá thư viện podcast miễn phí tại đây. Đồng thời, ứng dụng desktop Castify có sẵn trên Mac, Windows và Linux để bạn dễ dàng biến kênh YouTube yêu thích thành podcast riêng.

Nếu bạn có thắc mắc về pipeline hoặc muốn chia sẻ ý kiến, xin hãy để lại bình luận phía dưới!

Bài viết được tổng hợp và biên soạn bằng AI từ các nguồn tin tức công nghệ. Nội dung mang tính tham khảo. Xem bài gốc ↗