5 poin oleh GN⁺ 2025-05-31 | 1 komentar | Bagikan ke WhatsApp
  • typed-ffmpeg adalah wrapper modern yang membuat FFmpeg dapat digunakan secara intuitif di Python
  • Menyediakan dukungan tipe yang kuat, dokumentasi yang kaya, dan pelengkapan otomatis IDE untuk meningkatkan pengalaman pengembangan dan stabilitas kode
  • Mendukung pembuatan konfigurasi filter graph yang kompleks dengan mudah, serta fitur lanjutan seperti visualisasi dan serialisasi JSON
  • Instalasi dan penggunaan sederhana, serta dapat diuji langsung di browser melalui playground interaktif
  • Terinspirasi dari ffmpeg-python sambil memperbaiki keterbatasan yang ada, dan ke depan direncanakan mendukung lebih banyak versi serta filter FFmpeg

Gambaran umum dan pentingnya typed-ffmpeg

  • typed-ffmpeg adalah paket open-source untuk mengendalikan FFmpeg dengan gaya Pythonic modern
  • Dibangun hanya dengan pustaka standar Python sehingga tanpa dependensi, dengan keunggulan keamanan dan kompatibilitas yang tinggi
  • Keunggulan terbesar adalah dukungan tipe yang kaya, sintaks yang sederhana, pelengkapan otomatis, dan dokumentasi inline, sehingga pekerjaan filter FFmpeg yang kompleks bisa dikodekan dengan mudah dan aman
  • Mengatasi keterbatasan ffmpeg-python yang ada, terutama integrasi IDE dan ketiadaan tipe, serta mendukung berbagai fitur baru seperti serialisasi JSON, validasi otomatis filter graph, dan graph visual
  • Dalam proses wrapping dan otomatisasi nyata, GPT-3 dan Copilot membantu produktivitas pengembangan, tetapi inti pembuatan kode tetap mengandalkan generasi kode tradisional yang andal

Fitur utama (Features)

  • Tanpa dependensi: hanya menggunakan pustaka standar Python
  • Antarmuka intuitif: filter graph FFmpeg dapat disusun dengan mudah melalui kode Python
  • Dukungan filter yang komprehensif: mendukung sebagian besar filter FFmpeg dan pelengkapan otomatis IDE
  • Dokumentasi terintegrasi: docstring inline meminimalkan kebutuhan untuk merujuk dokumentasi eksternal
  • Dukungan tipe yang kokoh: pemeriksaan tipe statis/dinamis meningkatkan keandalan kode dan mempermudah debugging
  • Serialisasi filter graph: filter graph dapat disimpan/dipulihkan dalam format JSON
  • Visualisasi graph: menyediakan fitur diagram filter graph melalui graphviz
  • Validasi dan koreksi otomatis: mendeteksi kesalahan dalam filter graph dan melakukan koreksi otomatis
  • Perluasan opsi input/output: dukungan berbagai codec/format memperluas cakupan pemanfaatan FFmpeg
  • Fitur evaluasi parsial: mendukung modularisasi dan peningkatan reusabilitas filter graph

Fitur yang direncanakan

  • Akan memperluas kompatibilitas yang luas ke versi selain FFmpeg 6.0
  • Dukungan untuk lebih banyak filter kompleks juga direncanakan, dengan perluasan fitur yang terus berlanjut

Contoh cepat (Quick Usage)

import ffmpeg  
  
# Membalik video secara horizontal lalu mengekspor  
f = (  
    ffmpeg  
    .input(filename='input.mp4')  
    .hflip()  
    .output(filename='output.mp4')  
)  
f  
  • Sebagai contoh yang lebih kompleks, filter graph dapat merepresentasikan pemotongan beberapa segmen lalu menambahkan overlay dan 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  
  • Lebih banyak contoh dan penjelasan detail tersedia di dokumentasi

Playground interaktif

  • Di browser, pengguna dapat bereksperimen dengan filter dan perintah FFmpeg, memvisualisasikan hasil, menguji berbagai opsi input/output, mempelajari contoh interaktif, dan membagikan filter graph
  • Bahkan tanpa lingkungan lokal, ini adalah sarana yang sangat efektif untuk membuat prototipe dan mempelajari rantai filter FFmpeg

Latar belakang proyek dan ucapan terima kasih

  • Proyek ini dimulai dari inspirasi ide pembuatan SDK otomatis berbasis dokumentasi FFmpeg oleh GPT-3
  • Pembuatan inti dialihkan ke pendekatan generasi kode manual demi memastikan keandalan
  • Dalam proses pengembangan, GitHub Copilot dan GPT-3 berkontribusi meningkatkan efisiensi pengembangan
  • ffmpeg-python memberikan inspirasi besar pada gaya API dan desainnya
  • Proyek ini dipersembahkan untuk Austin, anak dari pengembang

Dokumentasi dan referensi

  • Informasi yang lebih detail dan fitur lanjutan dapat dilihat di Documentation resmi
  • Selain instalasi paket tunggal, dukungan graphviz untuk fitur tambahan seperti visualisasi graph dapat diaktifkan melalui opsi terpisah
  • Versi terpisah (typed-ffmpeg-compatible) juga tersedia untuk kompatibilitas dengan ffmpeg-python

1 komentar

 
GN⁺ 2025-05-31
Komentar Hacker News
  • Orang-orang terlalu meremehkan kenyataan bahwa setiap parser atau toolkit opsi command line pada dasarnya adalah bahasa konfigurasi lengkap yang berdiri sendiri; setiap alat perlu dipahami sebagai program atau konfigurasi tersendiri yang berjalan dalam bahasa itu. Karena aturan pemisahan kata di shell Unix dan kemiripan sintaks di permukaan, orang sering salah paham dan mengira semuanya jauh lebih seragam daripada kenyataannya, padahal variasinya sangat besar. Secara pribadi, saat mencoba menjalankan semua program di /usr/bin dengan opsi --help atau -h, tingkat kegagalan untuk mendapatkan bantuan yang saya harapkan ternyata cukup tinggi. Untuk alat serumit ffmpeg, pengenalan informasi tipe seperti ini patut didorong karena membantu menyadari masalah keberagaman tersebut sekaligus memberi manfaat nyata.
    • Pengalaman saya juga, man foo jauh lebih andal dan berguna daripada foo --help atau foo -h.
    • Sebagai pemula, saya penasaran secara spesifik benturannya terjadi di mana, titik pertentangannya ada di bagian mana.
  • Mengesankan bahwa proyek ini dikembangkan secara aktif, tetapi tampaknya masih memiliki beberapa masalah yang mirip dengan ffmpeg-python. Misalnya, saya tidak melihat cara untuk menentukan filter seperti color yang berjalan tanpa input. Juga tidak ada cara untuk menetapkan flag Popen seperti subprocess.CREATE_NO_WINDOW agar jendela CMD tidak muncul di aplikasi GUI. Untuk ffmpeg, ini bisa diatasi dengan eksekusi manual setelah ffmpeg.compile(), tetapi pada ffmpeg.probe() cara itu tidak bisa diterapkan. Selain itu, saya menemukan masalah source filter bisa ditangani dengan ffmpeg.sources.color, tetapi saya penasaran apakah ada cara menggunakan source filter arbitrer seperti vfilter/afilter.
  • Jika Anda melakukan pemrosesan video berbasis skrip dengan Python, saya sangat merekomendasikan menggunakan Vapoursynth. Ini adalah alat yang sejak awal dirancang untuk pemrosesan video, dengan pemeliharaan aktif, komunitas, dan ekosistem alat yang solid. Anda juga bisa menggunakannya dengan lebih bebas tanpa terikat pada CLI ffmpeg. Berikut tautan ke situs web Vapoursynth.
  • Ide yang sangat keren, saya pribadi menantikan versi typescript dari proyek ini.
    • Saya sempat menguji secara singkat bagaimana versi typescript ini bisa terlihat dengan alat pratinjau Jules. Implementasinya cukup sederhana, tetapi saya rasa masih ada cara yang lebih mudah dibaca. Untuk prompt yang sangat singkat, hasilnya tidak buruk. Bagi yang penasaran, saya membagikan kode di branch multi-language-codegen.
    • Akan sangat bagus kalau versi typescript juga dirilis.
    • Lelucon yang mengibaratkan typescript sebagai "bahasa para dewa".
    • Ada catatan bahwa penyebutan typescript tidak ada di dokumentasi resmi.
  • Saya merasa bentuk command line ffmpeg seharusnya dideskripsikan agar bisa dibaca mesin, sehingga dapat dihasilkan otomatis menjadi kode untuk berbagai bahasa.
  • Alat visualnya sangat mengesankan. FFMPEG tampak seperti contoh yang benar-benar bisa dibuat lebih mudah diakses lewat pemrograman visual/modular. Banyak pengguna tidak mengetahui semua fiturnya, jadi pendekatan seperti ini akan membantu. Dari sisi UX, saya berharap tombol DEL bisa digunakan untuk menghapus node/edge, tetapi ternyata tidak berfungsi, jadi itu sedikit disayangkan. Secara keseluruhan, pengalamannya luar biasa.
    • Akhirnya muncul juga alat yang mirip dengan DirectShow GraphEdit milik MS.
  • Menurut saya ini proyek yang sangat menarik; jika sampai mendukung pengiriman frame melalui pipe di antara perintah-perintah terpisah, skalabilitas penggunaan FFMpeg yang sesungguhnya akan benar-benar terbuka.
  • Saya merasa proyek ini terlalu keren, jadi saya juga ingin memperkenalkan alat editor video milik newbeelearn yang memungkinkan pengeditan video secara visual. Alat tersebut juga dapat menghasilkan perintah ffmpeg secara otomatis.
  • Kerja bagus.
  • Proyek ini terlihat sangat keren.