5 điểm bởi GN⁺ 2025-05-31 | 1 bình luận | Chia sẻ qua WhatsApp
  • typed-ffmpeg là một wrapper hiện đại giúp sử dụng FFmpeg trong Python một cách trực quan
  • Cung cấp hỗ trợ kiểu mạnh mẽ, tài liệu phong phú và tự động hoàn thành trong IDE để cải thiện trải nghiệm phát triển và độ ổn định của mã
  • Hỗ trợ các tính năng nâng cao như dễ dàng tạo đồ thị bộ lọc phức tạp, trực quan hóa và tuần tự hóa JSON
  • Việc cài đặt và chạy rất đơn giản, đồng thời có thể thử nghiệm ngay trên trình duyệt thông qua playground tương tác
  • Lấy cảm hứng từ ffmpeg-python để khắc phục các hạn chế hiện có, và dự kiến sẽ hỗ trợ thêm nhiều phiên bản FFmpeg cùng bộ lọc hơn trong tương lai

Tổng quan và tầm quan trọng của typed-ffmpeg

  • typed-ffmpeg là một gói mã nguồn mở cho phép điều khiển FFmpeg theo phong cách Pythonic hiện đại
  • Được xây dựng chỉ bằng thư viện chuẩn của Python nên không có phụ thuộc, mang lại ưu điểm về bảo mật và khả năng tương thích cao
  • Ưu điểm lớn nhất là hỗ trợ kiểu phong phú, cú pháp đơn giản, tự động hoàn thành và tài liệu nội tuyến, giúp mã hóa các tác vụ bộ lọc FFmpeg phức tạp một cách dễ dàng và an toàn
  • Khắc phục các giới hạn của ffmpeg-python, đặc biệt là việc tích hợp IDE và thiếu hệ thống kiểu, đồng thời hỗ trợ nhiều tính năng mới như tuần tự hóa JSON, tự động xác thực đồ thị bộ lọc và đồ thị trực quan
  • Trong quá trình bọc và tự động hóa thực tế, GPT-3 và Copilot đã đóng góp vào năng suất phát triển, nhưng điểm đặc trưng là phần cốt lõi của việc sinh mã được tiếp cận theo hướng tạo mã truyền thống đáng tin cậy

Tính năng chính (Features)

  • Không phụ thuộc: chỉ sử dụng thư viện chuẩn của Python
  • Giao diện trực quan: có thể dễ dàng xây dựng đồ thị bộ lọc FFmpeg bằng mã Python
  • Hỗ trợ bộ lọc toàn diện: hỗ trợ hầu hết các bộ lọc FFmpeg và tự động hoàn thành trong IDE
  • Tài liệu tích hợp: docstring nội tuyến giúp giảm tối đa nhu cầu tham chiếu tài liệu bên ngoài
  • Hỗ trợ kiểu vững chắc: tăng độ tin cậy của mã và khả năng gỡ lỗi bằng kiểm tra kiểu tĩnh/động
  • Tuần tự hóa đồ thị bộ lọc: có thể lưu/khôi phục đồ thị bộ lọc ở định dạng JSON
  • Trực quan hóa đồ thị: cung cấp tính năng sơ đồ hóa đồ thị bộ lọc thông qua graphviz
  • Tự động xác thực và hiệu chỉnh: phát hiện lỗi trong đồ thị bộ lọc và tự động sửa
  • Mở rộng tùy chọn đầu vào/đầu ra: mở rộng phạm vi sử dụng FFmpeg nhờ hỗ trợ nhiều codec/định dạng
  • Đánh giá từng phần: hỗ trợ mở rộng tính mô-đun và khả năng tái sử dụng của đồ thị bộ lọc

Tính năng dự kiến sắp tới

  • Dự kiến mở rộng khả năng tương thích rộng rãi sang các phiên bản khác ngoài FFmpeg 6.0
  • Có kế hoạch hỗ trợ nhiều bộ lọc phức tạp hơn và tiếp tục mở rộng tính năng

Ví dụ nhanh (Quick Usage)

import ffmpeg  
  
# Lật ngang video và xuất ra  
f = (  
    ffmpeg  
    .input(filename='input.mp4')  
    .hflip()  
    .output(filename='output.mp4')  
)  
f  
  • Với ví dụ phức tạp hơn, có thể biểu diễn đồ thị bộ lọc cắt nhiều đoạn rồi thêm overlay và drawbox
import ffmpeg.filters  
import ffmpeg  
  
in_file = ffmpeg.input("input.mp4")  
overlay_file = ffmpeg.input("overlay.png")  
  
f = (  
    ffmpeg.filters  
    .concat(  
        in_file.trim(start_frame=10, end_frame=20),  
        in_file.trim(start_frame=30, end_frame=40),  
    )  
    .video(0)  
    .overlay(overlay_file.hflip())  
    .drawbox(x="50", y="50", width="120", height="120", color="red", thickness="5")  
    .output(filename="out.mp4")  
)  
f  
  • Có thể xem thêm ví dụ và giải thích chi tiết trong tài liệu

Playground tương tác

  • Có thể thử nghiệm các bộ lọc và lệnh FFmpeg trên trình duyệt, trực quan hóa kết quả, kiểm thử nhiều tùy chọn đầu vào/đầu ra, học qua các ví dụ tương tác và chia sẻ đồ thị bộ lọc
  • Đây là môi trường rất hiệu quả để tạo nguyên mẫu chuỗi bộ lọc FFmpeg và học tập mà không cần môi trường cục bộ

Bối cảnh dự án và lời cảm ơn

  • Dự án bắt đầu từ ý tưởng tự động tạo SDK dựa trên tài liệu FFmpeg của GPT-3
  • Phần sinh lõi đã được chuyển sang phương thức tạo mã thủ công để đảm bảo độ tin cậy
  • Trong quá trình phát triển, GitHub Copilot và GPT-3 đã góp phần tăng hiệu quả phát triển
  • ffmpeg-python đã truyền cảm hứng cho phong cách API và thiết kế, ảnh hưởng lớn đến kiến trúc của dự án
  • Dự án được dành tặng cho Austin, con của nhà phát triển

Tài liệu và tham khảo

  • Có thể xem thông tin chi tiết hơn và các tính năng nâng cao trong Documentation chính thức
  • Ngoài việc cài đặt gói đơn lẻ, có thể bật hỗ trợ graphviz thông qua tùy chọn riêng cho các tính năng bổ sung như trực quan hóa đồ thị
  • Cũng cung cấp phiên bản riêng (typed-ffmpeg-compatible) để tương thích với ffmpeg-python

1 bình luận

 
GN⁺ 2025-05-31
Ý kiến trên Hacker News
  • Đây là một nhận định thực tế rằng mọi trình phân tích tùy chọn dòng lệnh hay toolkit đều bị đánh giá quá thấp ở chỗ mỗi cái thực chất là một ngôn ngữ cấu hình hoàn chỉnh, độc lập của riêng nó; cần nhìn nhận rằng mỗi công cụ là một chương trình hoặc cấu hình riêng vận hành trong ngôn ngữ đó. Điều này cũng nhấn mạnh hiện tượng mọi người hiểu nhầm rằng thế giới đó khá đồng nhất, trong khi trên thực tế có sự đa dạng rất lớn do quy tắc tách từ của Unix shell và những cú pháp bề ngoài trông tương tự nhau. Cá nhân tôi từng thử chạy mọi chương trình trong /usr/bin với tùy chọn --help hoặc -h, và tỷ lệ thất bại khi không nhận được phần trợ giúp như mong đợi là khá cao. Việc đưa thông tin kiểu vào một công cụ phức tạp như ffmpeg là một thông điệp khích lệ, vừa giúp nhận thức rõ vấn đề đa dạng này, vừa có thể mang lại lợi ích thực tế.
    • Chia sẻ rằng man foo đáng tin cậy và hữu ích hơn nhiều so với foo --help hay foo -h.
    • Bày tỏ sự tò mò, muốn biết cụ thể người mới bắt đầu đã gặp xung đột ở đâu và điểm đối lập đó nằm ở chỗ nào.
  • Dù ấn tượng vì dự án đang được phát triển rất tích cực, có vẻ nó vẫn gặp một số vấn đề tương tự ffmpeg-python. Ví dụ, chưa thấy cách chỉ định các filter hoạt động không cần đầu vào như color; cũng không có cách đặt các cờ Popen như subprocess.CREATE_NO_WINDOW để ngăn cửa sổ CMD hiện lên trong ứng dụng GUI. Với ffmpeg thì có thể xử lý bằng cách chạy thủ công sau ffmpeg.compile(), nhưng cách đó không áp dụng được với ffmpeg.probe(). Ngoài ra, tác giả đã xác định được vấn đề source filter qua ffmpeg.sources.color, nhưng vẫn thắc mắc liệu có cách dùng source filter tùy ý tương tự như vfilter/afilter hay không.
  • Nếu làm xử lý video theo kiểu script bằng Python thì rất nên dùng Vapoursynth. Đây là công cụ được thiết kế ngay từ đầu cho mục đích xử lý video, có bảo trì tích cực, cộng đồng và hệ sinh thái công cụ cũng rất đầy đủ. Có thể sử dụng linh hoạt mà không bị trói buộc vào CLI của ffmpeg. Chia sẻ liên kết tới trang chủ Vapoursynth.
  • Ý tưởng thực sự rất tuyệt, cá nhân tôi đang mong chờ phiên bản typescript của dự án này.
    • Tôi đã thử nhanh xem phiên bản typescript có thể trông như thế nào bằng công cụ preview Jules. Cách triển khai khá đơn giản, nhưng tôi nghĩ vẫn có thể làm nó dễ đọc hơn nữa. So với một prompt rất ngắn thì kết quả không tệ, nên tôi chia sẻ mã trong nhánh multi-language-codegen cho ai quan tâm.
    • Sẽ thật tuyệt nếu phiên bản typescript cũng được phát hành.
    • Một câu đùa ví typescript là “ngôn ngữ của các vị thần”.
    • Chỉ ra rằng phần nhắc đến typescript không có trong tài liệu chính thức.
  • Có ý kiến cho rằng nên mô tả hình thức của dòng lệnh ffmpeg theo cách mà máy có thể đọc được, để từ đó tự động sinh mã cho nhiều ngôn ngữ khác nhau.
  • Công cụ trực quan đặc biệt gây ấn tượng. FFMPEG có vẻ là một trường hợp mà lập trình trực quan/mô-đun hóa thực sự có thể cải thiện đáng kể khả năng tiếp cận. Nhiều người dùng không biết hết mọi chức năng, nên cách tiếp cận này sẽ hữu ích. Về UX, người dùng đã kỳ vọng có thể dùng phím DEL để xóa node/cạnh nhưng điều đó chưa hoạt động nên hơi tiếc; nhìn chung đây vẫn là một trải nghiệm tuyệt vời.
    • Cuối cùng cũng đã xuất hiện một công cụ tương tự DirectShow GraphEdit của MS.
  • Tôi thấy đây là một dự án thực sự thú vị; nếu còn hỗ trợ cả việc truyền frame qua pipe giữa các lệnh riêng lẻ thì khả năng mở rộng thực sự của FFMpeg sẽ được mở ra.
  • Tôi thấy dự án này quá tuyệt, nên cũng muốn giới thiệu thêm công cụ video editor của newbeelearn cho phép chỉnh sửa video theo cách trực quan; công cụ đó cũng có thể tự động tạo lệnh ffmpeg.
  • Một lời động viên ngắn gọn: làm rất tốt.
  • Cảm thán rằng dự án trông cực kỳ tuyệt vời.