5 puntos por GN⁺ 2025-05-31 | 1 comentarios | Compartir por WhatsApp
  • 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

 
GN⁺ 2025-05-31
Comentarios de Hacker News
  • Se subestima demasiado el hecho de que todos los parsers o toolkits de opciones de línea de comandos son, cada uno por su cuenta, lenguajes de configuración completos e independientes; hace falta reconocer que cada herramienta funciona como un programa o configuración aparte dentro de ese lenguaje. También se explica que, por las reglas de separación de palabras del shell de Unix y una sintaxis superficialmente parecida, la gente suele malinterpretar una enorme diversidad real como si fuera algo demasiado uniforme. Comparte además la experiencia personal de haber probado todos los programas en /usr/bin con las opciones --help y -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.
    • Comparte la experiencia de que man foo es mucho más confiable y útil que foo --help o foo -h.
    • Expresa curiosidad, como principiante, sobre en qué puntos concretos hubo conflictos y dónde estaba exactamente esa oposición.
  • Impresiona que el proyecto esté en desarrollo activo, pero parece tener algunos problemas similares a ffmpeg-python; por ejemplo, no se ve cómo especificar filtros como color que funcionan sin entrada. Tampoco hay una forma de indicar flags de Popen como subprocess.CREATE_NO_WINDOW para evitar que aparezca la ventana de CMD en una app GUI. Con ffmpeg esto puede resolverse ejecutándolo manualmente después de ffmpeg.compile(), pero se menciona que ese método no aplica a ffmpeg.probe(). Además, dice que identificó el tema de los filtros fuente con ffmpeg.sources.color, pero pregunta si hay una forma de usar filtros fuente arbitrarios como se hace con vfilter/afilter.
  • Si vas a hacer procesamiento de video por scripts en Python, recomienda fuertemente usar Vapoursynth. Es una herramienta diseñada desde el inicio para procesamiento de video, con mantenimiento activo, comunidad y un ecosistema sólido de herramientas. Se puede usar con libertad sin quedar atado al CLI de ffmpeg. Comparte el enlace a la página oficial de Vapoursynth.
  • Es una idea realmente genial; personalmente espera una versión en typescript de este proyecto.
    • Probó rápidamente con la herramienta de vista previa Jules cómo podría verse una versión en typescript. La implementación es bastante simple, aunque se le ocurre una forma más legible. Para un prompt muy corto, el resultado no está nada mal. Comparte el código en la rama multi-language-codegen para quien tenga curiosidad.
    • Opina que estaría muy bien que también saliera una versión en typescript.
    • Broma en la que se compara typescript con el “lenguaje de dios”.
    • Señala que la mención de typescript no aparecía en la documentación oficial.
  • Piensa que la forma del CLI de ffmpeg debería describirse de manera legible por máquinas para que pueda generarse código automáticamente en varios lenguajes.
  • La herramienta visual le impresiona especialmente; FFMPEG parece un caso claro donde la programación modular/visual realmente podría mejorar la accesibilidad. Como mucha gente no conoce todas sus funciones, este enfoque puede ser de gran ayuda. Desde UX esperaba poder borrar nodos/aristas con la tecla DEL, pero eso no funcionó y le dejó cierta decepción. En general, de todos modos, la experiencia es excelente.
    • Expresa alegría porque por fin apareció una herramienta parecida a MS DirectShow GraphEdit.
  • Le parece un proyecto realmente interesante; opina que si incluso soportara pasar frames por pipe entre comandos individuales, se abriría la verdadera escalabilidad del uso de FFMpeg.
  • Le parece tan genial este proyecto que también quiere presentar la herramienta de editor de video de newbeelearn, que permite editar video visualmente y también generar comandos de ffmpeg automáticamente.
  • Breve mensaje de ánimo diciendo que es un buen trabajo.
  • Exclamación de que el proyecto se ve muy genial.