Web Analytics

FramePFX

⭐ 267 stars Spanish by AngryCarrot789

FramePFX

FramePFX es un editor de video no lineal de código abierto, escrito en C# usando Avalonia para la interfaz de usuario.

Remake

Actualmente estoy trabajando en una reconstrucción completa (en la rama remake). Las principales diferencias son un nuevo motor de audio, reproducción basada en audio en lugar de video, y posicionamiento basado en TimeSpan en lugar de por cuadro.

Documentación

Aquí hay algunos enlaces a los archivos de documentación, si quieres aprender más sobre el frontend y backend

Sistema de plugins + API de FramePFX

Sistema de Automatización/Animación

Sistema de comandos, menú contextual, atajos

Sistema de renderizado

Resumen del sistema de atajos

Resumen de la UI

Previsualizaciones

Esta es la última versión usando Avalonia:

Aquí hay una vista previa del proceso de exportación. El botón de exportar está en Archivo>Exportar, especificas una ruta y luego haces clic en Exportar. Para cancelar el render solo debes hacer clic en Cancelar en el diálogo detrás de la ventana de progreso de exportación

El panel gris debajo de "Exporter: FFmpeg" contiene detalles específicos del codificador

¡Interfaz gráfica personalizable!

Los temas pueden personalizarse a tu gusto. Pueden guardarse en disco y modificarse dentro de la aplicación. Los temas incorporados (Oscuro y Claro) no deben modificarse porque los cambios no se guardan. Debes crear una copia y modificar esa copia en su lugar

Compilación

FramePFX asume que todo es de 64 bits --- ¡x86/32-bit/AnyCPU no funcionarán correctamente!

Los proyectos nativos se descargan y compilan automáticamente cuando construyes los proyectos C# por primera vez, sin embargo, si quieres que los clips de medios y la exportación funcionen, FFmpeg debe descargarse por separado. Aquí está la versión específica que funciona actualmente (solo Windows): https://github.com/BtbN/FFmpeg-Builds/releases/download/autobuild-2024-09-30-15-36/ffmpeg-N-117275-g04182b5549-win64-gpl-shared.zip

Descargando

Clona el proyecto recursivamente:

git clone --recursive https://github.com/AngryCarrot789/FramePFX

Si quieres instalar FFmpeg para usar clips de video y exportación con FFmpeg:

>Debería haber 8 archivos DLL en \FramePFX\ffmpeg\bin, y uno de ellos debería ser avcodec-61.dll. Si no es 61, tienes la versión incorrecta de FFmpeg. Puedes eliminar los archivos EXE si quieres, ya que no se usan

Construir el proyecto

Con suerte, luego deberías poder ejecutar y modificar los proyectos FramePFX sin problema. Este proyecto usa Avalonia 11.2.2 y .NET 8 (C# 12).

>No modifiques el proyecto portaudio porque se genera automáticamente con cmake, por lo que tus cambios pueden ser sobrescritos.

Comandos solo para Windows

Los proyectos en la solución usan comandos de Windows como mkdir y xcopy, que pueden no funcionar en otras plataformas. ¡Siéntete libre de crear un pull request con una solución más multiplataforma!

Posibles problemas de construcción

A veces, la librería nuget SkiaSharp no copia los archivos de la librería skia a la carpeta bin cuando clonas este repositorio y lo construyes. Encontré 2 soluciones: Si ninguna de estas funciona, intenta desinstalar SkiaSharp en el gestor de Nuget y luego reinstalarlo. Si aún así no funciona, realmente no sé qué está pasando...

¡Plugins!

¡FramePFX ahora soporta plugins! La API de plugins está muy en desarrollo, pero puede cargar plugins. Actualmente los plugins deben compilarse usando las mismas versiones de dependencias que usa FramePFX, ya que no usamos AssemblyLoadContext

Puedes encontrar más información aquí: Sistema de plugins + API de FramePFX

Ejemplos

El plugin AnotherTestPlugin añade una página de configuración de prueba (que se encuentra en Archivo > Abrir configuración del editor), y también añade un exportador de prueba inútil al diálogo de exportación.

Agregar la página es muy simple y se puede hacer desde el controlador OnApplicationLoaded del plugin:

public override async Task OnApplicationLoaded() {
    ApplicationConfigurationManager.Instance.RootEntry.AddEntry(new ConfigurationEntry() {
        DisplayName = "Test Plugin Settings", 
        Id = "config.testplugineditorsettings",
        
        // This page is just a PropertyEditor page. 
        // Completely custom xaml pages are a bit wonky at the moment, 
        // only user controls will work properly due to resource dictionaries
        Page = new TestPluginConfigurationPage()
    });
}
Esto resulta en:

TODO

Remake de Avalonia:

Motor de Renderizado

Anteriormente, se renderizaba audio extrayendo un número exacto de bytes de un clip basado en la tasa de cuadros del proyecto. Sin embargo, esto produce muchos crujidos ya que los FPS de reproducción no son exactamente precisos.

También es necesario rehacer el renderizado de video, ya que el puerto de visualización suele ser bastante pequeño, pero estamos renderizando cuadros de video de tamaño completo de cada clip y luego simplemente escalándolos hacia abajo. Esto no es tan malo para, digamos, rectángulos y formas primitivas básicas. Sin embargo, renderizar un cuadro de video 4K desde un archivo MP4 es una tarea larga y desagradable, luego escalar a 1080p (o al MediaScale del clip) y finalmente hacia el puerto de visualización (típicamente alrededor de 500x300) al final es simplemente un gran desperdicio, así que necesitamos métodos RenderFull y RenderPreview, o un nuevo sistema de renderizado. La técnica actual de renderizado asíncrono no parece tan mala.

Motor de Automatización

Clips

y solo algunos códecs de video parecen funcionar. Muchos formatos comunes dan un error como "datos inválidos encontrados durante la decodificación". No conozco mucho FFmpeg, pero espero arreglar esto en algún momento.

Sistema de Historial

Errores a corregir

Sincronización multihilo

Quizás un bloqueo a nivel de aplicación para escribir en el estado de los modelos? Esto es similar a cómo funciona IntelliJ IDEA; un bloqueo mayormente de lectura, lectura-escritura. Los bloqueos de escritura solo pueden adquirirse en el hilo principal (usamos el despachador para acceder allí), pero cualquier hilo puede tomar el bloqueo de lectura. Tomar el bloqueo de lectura requiere bloquear hasta que no haya operaciones de escritura pendientes, y tomar el bloqueo de escritura requiere bloquear hasta que todos los lectores hayan terminado (y también hay un evento disparado al intentar adquirir el bloqueo de escritura, para permitir que los lectores cancelen sus operaciones y evitar congelar la interfaz de usuario).

Contribuciones

¡Las contribuciones son bienvenidas con los brazos abiertos! Simplemente crea un pull request, o un issue y luego un PR, lo que prefieras. Puedes encontrar información sobre cómo compilar y ejecutar/depurar la aplicación si desplazas un poco hacia arriba. La lista de TODO está arriba, pero también puedes buscar // TODO: en la base de código.

Puedes encontrar explicaciones detalladas en la carpeta docs, que explica las partes centrales del editor (como los comandos, la automatización, etc.). Todavía hay mucho por documentar, por lo que no explica todo

La base de código no es perfecta, ¡así que siéntete libre de ayudar a intentar estandarizar las cosas!

Licencia

Todos los archivos fuente en FramePFX están bajo la Licencia Pública General GNU versión 3.0 o posterior (GPL v3.0+). FramePFX usa bibliotecas que tienen otras licencias, como licencias MIT/LGPL.

Si algún archivo fuente carece de aviso de copyright, se asume que está licenciado bajo la misma licencia que FramePFX

Actualmente, las partes LGPL usadas son:

--- Tranlated By Open Ai Tx | Last indexed: 2026-03-28 ---