JavaFX: Creando un front end para ffmpeg | Haciendo ScreenCast.

Hola a todos, hoy les comparto mi pequeño y simple proyecto hecho en JavaFX, quise utilizar el SceneBuilder y los XML de FX, mas los CSS (de FX también).

Básicamente, la GUI solo actúa como un control para iniciar una grabación de audio y vídeo de nuestro entorno de escritorio. El verdadero poder lo tenemos en el software ffmpeg, el cual lanzamos como un proceso pero le hacemos algunas modificaciones mientras estamos en java.

El proyecto se compone de la siguiente manera:

Bien, cuando usamos la creacion de la GUI con FXML debemos tener tres cosas: La clase de control, el archivo fxml y nuestra clase principal.

Veamos pues;

 
Nuestro archivo FXML
 
Y nuestra clase principal:
 
Y unas cosillas extras, nuestro archivo css y una clase de utilidades:
 
 
Para muestra un video:

My ScreenCast demonstration from Kalt Wulx on Vimeo.

Recuerden que pueden descargar o clonar el proyecto desde git: les comparto el enlace y la pagina web.

Obviamente para mejores resultados es conveniente revisar la documentacion oficial de ffmpeg.
Me gustaria leer sus criticas y comentarios, me gustaria ademas me dieran algunos consejos para mejorar mi codigo.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Github

No seria mejor que pusieras tu proyecto en Github ? , esta bueno :B

Imagen de Jose Manuel

Re:Github

Ya se encuentra en GitHub, en el post esta el enlace al repositorio.
Saludos.

Imagen de gabo

Sólo en *nix?

Hola José

Una duda ffmpeg sólo funciona en plataformas Linux? Si es así en mi caso prefiero usar comandos desde un archivo bash o shell script

Imagen de Jose Manuel

Re: Sólo en *nix

Nop, FFmpeg tiene soporte en Windows y en Mac también. Se que en Windows la instrucción no cambiaría mucho pero, no se que tanto en Mac.

Claro, el propósito es que yo diera inicio con algo, aunque fuera muy simple, de aquí tengo la esperanza de seguir añadiendo cosas interesantes (básicamente jugar con características de audio y vídeo), ademas me interesa mucho la cámara web y el soporte en Windows. En Mac no, porque, no tengo una.

Pero claro, si para ti basta un script pues sip. Eso seria lo mas simple de utilizar.
Saludos

Imagen de gabo

Gracias por el aporte

Gracias por la retro, buen ejercicio.

Imagen de gabo

Matar el proceso con SIGNAL 2 en Windows

Realice un port del proyecto hacia ambiente Windows (javax.Swing en lugar de JavaFX) y digo port ya que cuando ejecuto el programa FFMPEG (en un Thread aparte) note que cuando se mata el proceso se cierra el buffer pero de forma incorrecta y por ende el archivo de vídeo/audio queda corrupto y no se puede reproducir

Por ejemplo:
 

Al listar nuevamente los procesos activos se observa notablemente que el PID ya no existe (ha muerto) causando el inconveniente anteriormente expuesto, sin embargo cuando al proceso activo se le envia un SIGNAL 2 (Ctrl + C) se cierra de forma correcta y el archivo no queda corrupto. Encontré que hay un tema al respecto e incluso software de terceros (sendSignal)

No he realizado la prueba en ambiente *nix supongo que un kill -9 es suficiente.

Imagen de Jose Manuel

Tienes razon, con un pkill

Tienes razon, con un pkill -SIGTERM ffmpeg funciona, ya que la señal 15 (SIGTERM) es un cierre correcto.
Saludos.