- 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
Ý kiến trên Hacker News
/usr/binvới tùy chọn--helphoặ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ế.man foođáng tin cậy và hữu ích hơn nhiều so vớifoo --helphayfoo -h.color; cũng không có cách đặt các cờPopennhư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 sauffmpeg.compile(), nhưng cách đó không áp dụng được vớiffmpeg.probe(). Ngoài ra, tác giả đã xác định được vấn đề source filter quaffmpeg.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/afilterhay không.