- typed-ffmpeg es un wrapper moderno que permite usar FFmpeg de forma intuitiva desde Python
- Ofrece sólido soporte de tipos, documentación abundante y autocompletado en el IDE para mejorar la experiencia de desarrollo y la estabilidad del código
- Permite crear fácilmente grafos de filtros complejos y admite funciones avanzadas como visualización y serialización JSON
- Su instalación y ejecución son sencillas, y además se puede experimentar desde el navegador mediante un playground interactivo
- Está inspirado en ffmpeg-python, corrige limitaciones existentes y planea ampliar el soporte para más versiones y filtros de FFmpeg
Descripción general e importancia de typed-ffmpeg
- typed-ffmpeg es un paquete de código abierto para controlar FFmpeg con un enfoque Pythonic moderno
- Está hecho solo con la biblioteca estándar de Python, por lo que no tiene dependencias y ofrece como ventajas alta seguridad y compatibilidad
- Su mayor fortaleza es que, gracias a su amplio soporte de tipos, sintaxis simple, autocompletado y documentación inline, permite codificar tareas complejas de filtros de FFmpeg de forma sencilla y confiable
- Complementa las limitaciones de ffmpeg-python, especialmente en integración con IDE y ausencia de tipos, y añade varias funciones nuevas como serialización JSON, validación automática de grafos de filtros y grafos visuales
- Aunque GPT-3 y Copilot ayudaron a la productividad durante el wrapping y la automatización, otra característica distintiva es que el núcleo de la generación de código se abordó mediante generación de código tradicional y confiable
Funciones principales (Features)
- Sin dependencias: usa solo la biblioteca estándar de Python
- Interfaz intuitiva: permite construir fácilmente grafos de filtros de FFmpeg con código Python
- Soporte integral de filtros: admite la mayoría de los filtros de FFmpeg y el autocompletado del IDE
- Documentación integrada: minimiza la necesidad de consultar documentación externa gracias a docstrings inline
- Soporte de tipos robusto: ofrece verificación de tipos estática y dinámica para reforzar la confiabilidad del código y facilitar la depuración
- Serialización de grafos de filtros: permite guardar y restaurar grafos de filtros en formato JSON
- Visualización de grafos: ofrece diagramación de grafos de filtros mediante graphviz
- Validación y corrección automáticas: detecta errores dentro del grafo de filtros y puede corregirlos automáticamente
- Ampliación de opciones de entrada/salida: amplía el alcance de uso de FFmpeg con soporte para varios codecs y formatos
- Evaluación parcial: ayuda a ampliar la modularidad y reutilización de los grafos de filtros
Funciones previstas
- Se planea ampliar la compatibilidad amplia con versiones distintas de FFmpeg 6.0
- También se prevé soporte para más filtros complejos, y el plan de expansión de funciones continúa en marcha
Ejemplo rápido (Quick Usage)
import ffmpeg
# Voltear video horizontalmente y exportarlo
f = (
ffmpeg
.input(filename='input.mp4')
.hflip()
.output(filename='output.mp4')
)
f
- Como ejemplo más complejo, se puede representar un grafo de filtros que recorta varios segmentos y añade overlay y 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
- Se pueden consultar más ejemplos y explicaciones detalladas en la documentación
Playground interactivo
- En el navegador es posible probar filtros y comandos de FFmpeg, visualizar resultados, probar distintas opciones de entrada/salida, aprender con ejemplos interactivos y compartir grafos de filtros
- Es un entorno muy eficaz para prototipar y aprender cadenas de filtros de FFmpeg sin necesidad de un entorno local
Contexto del proyecto y agradecimientos
- El proyecto comenzó inspirado por la idea de generar automáticamente un SDK a partir de la documentación de FFmpeg con GPT-3
- Para asegurar la confiabilidad del núcleo, se cambió a un enfoque de generación de código manual
- Durante el desarrollo, GitHub Copilot y GPT-3 contribuyeron a mejorar la eficiencia del trabajo
- ffmpeg-python inspiró el estilo y diseño de la API, influyendo fuertemente en su arquitectura
- El proyecto está dedicado al hijo del desarrollador, Austin
Documentación y referencia
- Se puede consultar información más detallada y funciones avanzadas en la Documentation oficial
- Además de la instalación del paquete principal, para funciones extra como la visualización de grafos se puede habilitar soporte para graphviz mediante opciones adicionales
- También se ofrece una versión aparte (typed-ffmpeg-compatible) para mantener compatibilidad con ffmpeg-python
1 comentarios
Comentarios de Hacker News
/usr/bincon las opciones--helpy-h, y haber tenido una tasa bastante alta de casos en los que no obtuvo la ayuda esperada. Es un mensaje de apoyo que enfatiza que introducir información de tipos en una herramienta compleja como ffmpeg puede ayudar a reconocer este problema de diversidad y aportar ventajas prácticas.man fooes mucho más confiable y útil quefoo --helpofoo -h.colorque funcionan sin entrada. Tampoco hay una forma de indicar flags dePopencomosubprocess.CREATE_NO_WINDOWpara evitar que aparezca la ventana de CMD en una app GUI. Con ffmpeg esto puede resolverse ejecutándolo manualmente después deffmpeg.compile(), pero se menciona que ese método no aplica affmpeg.probe(). Además, dice que identificó el tema de los filtros fuente conffmpeg.sources.color, pero pregunta si hay una forma de usar filtros fuente arbitrarios como se hace convfilter/afilter.DEL, pero eso no funcionó y le dejó cierta decepción. En general, de todos modos, la experiencia es excelente.