[Open Source] #132 - Plex Prerolls: Hệ thống tự động hóa trải nghiệm điện ảnh gia đình với Python, FFmpeg và kiến trúc Webhook-driven
Trải nghiệm xem phim tại nhà thường thiếu đi cảm giác chuyên nghiệp như ở rạp — nơi các đoạn video ngắn (pre-roll) giới thiệu hoặc thông báo được phát trước bộ phim chính. Plex Prerolls giải quyết vấn đề này bằng cách biến một máy chủ Plex tĩnh thành một rạp phim động, tự động thay đổi video giới thiệu theo mùa (Giáng sinh, Halloween), theo sự kiện, hoặc thậm chí là tự động dựng video giới thiệu "nóng hổi" cho những bộ phim vừa được thêm vào thư viện.
Dưới góc độ kỹ thuật, Plex Prerolls là một bài học mẫu mực về việc sử dụng Python để điều phối các công cụ nặng như FFmpeg và yt-dlp thông qua kiến trúc đa tiến trình bền bỉ.
Github: https://github.com/v8u7/plex-prerolls
🛠️ 1. Nền tảng công nghệ: Động cơ xử lý đa phương tiện mạnh mẽ
Plex Prerolls tận dụng tối đa các thư viện Python chuyên sâu để tương tác với cả hạ tầng phần mềm và dữ liệu truyền thông:
- Logic Core (Python 3.11): Sử dụng phiên bản Python hiện đại để tối ưu hóa tốc độ xử lý logic và tính tương thích với các thư viện bất đồng bộ.
- Plex API Integration (
plexapi): Kết nối trực tiếp vào hệ thống lõi của Plex Server, cho phép thay đổi cấu hìnhcinemaTrailersPrerollIDmột cách tự động mà không cần người dùng thao tác trên web. - Media Rendering Engine (FFmpeg): Sử dụng FFmpeg làm "nhà máy" xử lý video, cho phép thực hiện các kỹ thuật phức tạp như: chèn Poster, vẽ Text động (Rating, Title) và gộp nhạc nền vào trailer.
- Automation Framework (PM2 & Flask): Sử dụng PM2 để quản lý song song hai dịch vụ: một API Server (Flask) nhận Webhook thời gian thực và một Runner (Cron) xử lý lịch trình định kỳ.
🏗️ 2. Trụ cột kiến trúc: Decoupled Multiprocessing và Path Mapping
Kiến trúc của dự án giải quyết các bài toán hóc búa về sự lệch pha giữa các môi trường:
- Decoupled Architecture: Tách biệt hoàn toàn luồng Lập lịch (Runner) và luồng Sự kiện (Webhook). Điều này giúp hệ thống vừa có tính ổn định lâu dài (cập nhật lịch hàng ngày), vừa có tính phản ứng tức thì (tạo video ngay khi phim mới được tải lên).
- Intelligent Path Mapping (Globbing): Giải quyết vấn đề kinh điển của Docker: "Đường dẫn trong container khác với đường dẫn của Plex". Hệ thống tự động ánh xạ (map) từ đường dẫn cục bộ sang đường dẫn mà Plex hiểu được, đảm bảo video luôn được tìm thấy.
- Weight-based Randomization: Thay vì chỉ chọn ngẫu nhiên đơn thuần, hệ thống cho phép cấu hình "trọng số" (weight) cho từng video, giúp tăng tỉ lệ xuất hiện của các đoạn giới thiệu quan trọng hoặc mới lạ.
🔄 3. Workflow: Từ Webhook phim mới đến Video giới thiệu tùy chỉnh (Sequence Diagram)
Sơ đồ mô tả quy trình tự động dựng video "Just Added" khi có phim mới:

⚡ 4. Các kỹ thuật "Pro-level" trong mã nguồn
- Dynamic Overlay Engine: Sử dụng FFmpeg filter complex để tạo ra các hiệu ứng chồng lớp (overlay) chuyên nghiệp. Thông tin đánh giá từ Rotten Tomatoes hoặc IMDb được "dán" trực tiếp vào video, tạo cảm giác như một trailer truyền hình thực thụ.
- Wildcard Date Scheduling: Hỗ trợ định dạng ngày tháng thông minh (
xxxx-10-31cho Halloween), giúp người dùng cấu hình một lần và hệ thống sẽ tự động kích hoạt vào đúng dịp mỗi năm mà không cần can thiệp lại. - Process Resilience with PM2: Việc chạy trong Docker với PM2 đảm bảo hệ thống tự phục hồi. Nếu tiến trình render video tiêu tốn quá nhiều RAM và bị OS tắt (kill), PM2 sẽ khởi động lại dịch vụ ngay lập tức để duy trì dòng chảy dữ liệu.
- Content Rotation & Retention: Tự động quản lý kho lưu trữ video giới thiệu. Khi một video mới được tạo ra, hệ thống sẽ kiểm tra và xóa bỏ những video cũ nhất (FIFO), đảm bảo ổ cứng không bị đầy bởi các đoạn trailer tạm thời.
⚖️ 5. So sánh chiến lược
| Tiêu chí | Plex Prerolls | Plex Mặc định | Tùy biến Thủ công |
|---|---|---|---|
| Tính linh hoạt | Rất cao (Tự thay đổi theo mùa) | Thấp (Cố định) | Trung bình |
| Tính tự động | Hoàn toàn (Webhook + Cron) | Không | Thấp |
| Dựng video | Có (FFmpeg dynamic) | Không | Không (Phải dùng app ngoài) |
| Cấu hình | YAML (Dễ quản lý tập trung) | Giao diện web Plex | Sửa thủ công trong Settings |
| Chi phí vận hành | Tốn CPU khi render | Không | Không |
✅ Kết luận: Tại sao Plex Prerolls là hình mẫu cho Media Automation?
Plex Prerolls không chỉ là một công cụ tiện ích; nó là một bài học về việc xây dựng trải nghiệm người dùng thông qua tự động hóa. Dự án chứng minh rằng bằng cách kết nối các dịch vụ (Plex API, YouTube) và công cụ xử lý (FFmpeg), chúng ta có thể tạo ra những giá trị gia tăng cực lớn cho hạ tầng sẵn có.
Đối với các kỹ sư Backend, nghiên cứu dự án này giúp bạn hiểu sâu về:
- Kỹ thuật điều phối FFmpeg Pipeline từ Python.
- Cách xử lý Webhooks thời gian thực và quản lý đa tiến trình.
- Tư duy thiết kế hệ thống Cấu hình động (YAML-based) cho các ứng dụng Docker.
All Rights Reserved