FreeJ
Este es un mezclador de visiones: un instrumento digital para la manipulación de video en tiempo real. Es usado en la danza, el teatro, el veejaying, la transmisión en red, la visualización médica y la Televisión.
Ejecuta un motor de video en el cual múltiples layers pueden ser filtrados a través de cadenas de eventos que luego pueden ser mezclados con imágenes, cine, cámaras en vivo, generadores de particulas, texto rotativo y gráficos de vectores.
- Toda la mezcla de videos que resulta puede ser proyectada en una pantalla, comprimida como si fuera una película de cine, y también puede ser transmitida por internet. FreeJ puede ser controlado de manera local o remota, incluso desde múltiples lugares al mismo tiempo usando su interfaz tipo consola ascii. Las operaciones pueden ser escritas en javascript y lanzadas con un teclado, un mouse, controladores MIDI, joysticks, clientes OSC, Wiimotes y otros dispositivos. El código fuente de FreeJ está escrito en Portable C y en C++. Funciona en la mayoría de las plataformas soportadas por el compilador C de GNU, incluyendo procesadores para 32 y 64bits, Power PC y varias formas de ARM. FreeJ está liberado bajo la Licencia Pública General GNU (v3).
Características
- lee y renderea layers desde múltiples fuentes: webcams, TV, videos divx/avi, imágenes, archivos de texto plano, y mucho más;
- puede generar video Ogg/Theora, grabarlo a un archivo local y transmitirlo en vivo a un servidor Icecast;
puede ser controlado remotamente: VJoE -VeeJay en Ethernet;
- puede ser escrito usando javascript orientado a objetos;
- soporta los plugins de video frei0r y freeframe;
- tiene un motor de video muy eficiente con layers anidados;
- consola tipo Emacs/Vi con atajos de teclado y autocompletado;
- múltiples controladores al mismo tiempo (Midi,Joystick etc.);
- Código 100% Libre y Abierto, código GCC 4 portable y acorde con otros.
Historia
- Este software comenzó a ser desarrollado por Jaromil como un instrumento digital para usarlo en performances de danza-teatro. Desde el año 2001 el desarrollo consiguiente tomó inspiración de varios artistas y programadores: Andreas Schiffler, Roberto Paci Dalo', Tom Demeyer, Francesco Paolo Isidoro, Kentaro Fukuchi, Luigi Pagliarini e Isabella Bordoni por nombrar tan solo algunos. ¡Libera el Vee Jay! fue el primer slogan de este software.
En 2003 Kysucix se unió al desarrollo contribuyendo con la capacidad para transmitir la mezcla que produce FreeJ, y ayudando a incluir el parser de javascript. Kysucix ha utilizado FreeJ en instalaciones interactivas mientras trabajaba con el Studio Azzurro. Desde el año 2004 se recibe el apoyo del Netherlands Media Art Insitute. En el año 2005 Mr. Goil se unió al desarrollo escribiendo controladores programables, revisando el entorno del script y agregándole mas características. En 2007 la iniciativa austriaca Netculture Lab apoyó a Jaromil y Mr.Goil para desarrollar BeTV con lo que se mejora la escritura y el streaming, con una mayor limpieza del código y un soporte más amplio para los plugins de video.
En 2008 Jaromil y Mr.Goil se reunieron regularmente en sesiones de intercambio-escritura de código lo que rápidamente llevó el proyecto hacia el lanzamiento de la versión estable 1.0 del motor FreeJ y del API para javascript. Al mismo tiempo el desarrollador Caedes de Blender2Crystal experimenta con binding para python y usa el motor de FreeJ en un entorno 3d. Por primera vez desde su inicio, FreeJ es utilizado en varios performances, instalaciones interactivas y transmisiones de TV en línea, además de que se utiliza en visualizaciones y análisis médicos.
Los desarrolladores están muy interesados en conocer proyectos y propuestas para mantener estas actividades de desarrollo y así poder involucrar a mas desarrolladores. Si te interesa, por favor integrate a nuestra lista de correos en http://lists.dyne.org y sé parte de nuestra historia.
Contents
Introducción a FreeJ
Para iniciar con FreeJ puedes mirar también los archivos README, INSTALL y otros mas que son distribuidos con otros paquetes del código fuente. También puedes mirar la documentación en línea disponible en http://freej.dyne.org
Los mas poderosos usos de FreeJ envuelven el script para la interacción en vivo con dispositivos externos y con la composición de video. Aún desde el primer vistazo a la consola del controlador se puede tener un panorama de cómo es que este software trabaja.
Los tutoriales, ejemplos y referencias sobre el script están disponibles en el sitio web junto con el código fuente que se distribuye; los puedes encontrar en los directorios /doc y scripts/. Las distribuciones GNU/Linux normalmente empaquetan estos archivos dentro de /usr/share/freej y /usr/doc/FreeJ*
Como las sugerencias acerca del desarrollo son bienvenidas, integrate a la lista de correos http://lists.dyne.org y dejanos saber tus impresiones e ideas.
Objetivos de este Manual
En esta manual aprenderás a:
- instalar Freej;
- usar FreeJ para mostrar videos e imágenes estáticas;
- usar mas de un video mediante las capas o layers;
- mezclar layers unos con otros;
- aplicar efectos visuales a los videos que se muestran;
- cargar o crear código javascript para aplicarlo a objetos;
Para eso asumimos que tú:
- puedes usar una línea de comandos GNU/Linux;
- harás todos los ejercicios de este tutorial -si únicamente lo lees no aprenderás nada. ¡Tienes que poner las manos encima!
- nos comunicarás cualquier problema, comentario y sugerencia para que podamos mejorar este tutorial.
Manos a la Obra
Enlaces rápidos
el primer inicio -- cómo iniciar y detener freej
intefaz de usuario -- qué es cada cosa en freej
mezclando los videos (comienza la diversión)
usando efectos -- Básicos
Instalación
Requirimientos
Para compilar y ejecutar FreeJ es necesario tener:
un sistema activo GNU/Linux o Darwin/OSX -> mira la documentación en README.OSX
librerías SDL http://www.libsdl.org
librerías PNG http://www.libpng.org
librerías S-LANG http://www.s-lang.org
Algunas otras librerías son opcionales y muy recomendables de tener para aprovechar todas las características implementadas en FreeJ, en particular las librerías Ogg/Vorbis/Theora disponibles en http://www.xiph.org
Cómo instalar FreeJ
Usuarios GNU/Linux
Existen paquetes Debian y Ubuntu listos para instalar. Las versiones en desarrollo actualizadas con los recientes desarrollos son publicadas en: http://freej.dyne.org/
En Gentoo es posible también instalarlo mediante 'emerge freej'.
Usuarios Apple/OSX
Paquetes binarios de FreeJ para OSX deberían estar disponibles en el sitio web http://freej.dyne.org, aunque pueden estar un poco desactualizados y limitados. También es posible compilar FreeJ desde las fuentes siguiendo lo que se indica en el archivo README.OSX y usando XCode, MacPorts y Fink.
En caso de que seas un programador o programadora talentosa del OSX por favor considera ponerte en contacto con nosotros para contribuir a mejorar la plataforma para Apple de este software, ya que hay mucho que hacer todavía.
Usuarios Windlows
Ninguno de nosotros tiene ganas de compilar FreeJ en la plataforma M$, pero hay una manera fácil y rápida de experimentar con este software usando el disco en vivo dyne:bolic, que permite probar Freej sin tener que instalar nada, solo arráncalo.
Usuarios de consolas de Juego
Se han realizado exitosos experimentos en consolas como GP2SX y NintendoDs. Debería ser posible ejecutar FreeJ en otros dispositivos incrustrados y estamos muy interesados en hacerlo, así que ponte en contacto con nosotros si tú también lo estás
Instalando FreeJ desde el código fuente
So yo' smart, huh? I thou' yo' head woul' be biggah! (Idiocracy, Mike Judge, 2006)
x86 PC
Antes que nada asegúrate de tener:
- todas las librerías y herramientas requeridas:
cdbs, libtool, flex, bison, libsdl-dev, libpng-dev, libfreetype6-dev, libfontconfig-dev, libogg-dev, libvorbis-dev, libjpeg-dev, libslang2-dev, libtheora-dev, libavcodec-dev, libavformat-dev, libswscale-dev, libunicap2-dev, libbluetooth-dev, fftw3-dev, libjack-dev, libasound-dev, libhtml-template-perl, python-dev, swig
Si vas a crear paquetes Debian, necesitas tambien debhelper and pkg-config
POR FAVOR FIJATE: SE REQUIERE automake 1.9 - no funciona con una versión diferente (estamos trabajando fuertemente en esto).
- Un sistema activo GNU/Linux con X o framebuffer de video
liberías SDL http://www.libsdl.org
liberías PNG (compilar con soporte para _ZLIB_ ) http://libpng.org
Para tener algunos de los filtros optimizados assembler mmx necesitas NASM (NASM netwide assembler compiler, que encuentras en http://sf.net/projects/nasm).
luego de que descargues NASM, dirígete hacia el directorio filters/nasm-x86 y tecela
make
- copia a mano los filtros *.so en el directorio ~/.freej/ de tu home y estarás listo para el rock'n roll!
Ya que tienes todo lo anterior, descarga la versión estable reciente de freej desde http://ftp.dyne.org/freej
extrae el archivo fuente y compilalo:
$ tar xvfz freej.tar.gz $ cd freej (si estás leyendo este archivo desde las fuentes, comienza desde aquí) $ ./configure $ make $ sudo make install
esto instalará:
- los plugins de efectos en /usr/local/lib/freej/
- los binarios de freej en /usr/local/bin/
(o cualquier otro prefijo que configures en vez de la ubicación predeterminada /usr/local)
Para prenderlo solo teclea
freej
¡y es todo!
Darwin/OSX
Por favor lee el archivo README.OSX
Desde paquetes Debian
Asumiendo que puedes
apt-get install freej
y tener un FreeJ precompilado, lo mejor que puedes hacer para exprimir lo mejor de tu maldita computadora es ¡compilar el software con optimizaciones específicas para tu máquina!
El script de configuración adivinará las mejores optimizaciones al compilar las flags para tu CPU.
Los siguientes comandos son entonces necesarios para completar tu entorno. Desde adentro del directorio de las fuentes de freej tienes que hacer:
sudo apt-get install autoconf automake1.9 sudo apt-get build-dep freej dpkg-buildpackage -rfakeroot
Instalar desde el repositorio Git
(I know shit's bad right now with all that starvin' bullshit. And the dust storms. And we runnin' out of French Fries and burrito coverings. But I got a solution. - Idiocracy, Mike Judge, 2006)
Asumiendo que cuentas con una distribución Debian/Ubuntu (para otras distros puede haber algunas diferencias) con todas las herramientas necesarias y todas las librerías de desarrollo instaladas, por ejemplo build-essential, las librerías indicadas arriba, etc.) :
Necesitas instalar git:
apt-get install git-core
Luego tienes el código:
git clone git://code.dyne.org/freej.git
Luego de esto tu tendrás un directorio "freej". Entra y haz esto:
./autogen.sh
Con esto se crearán todos los archivos de configuración necesarios (puede ser que tengas que instalar algunas librerías faltantes o instalar la versión requerida de automake 1.9). Al mismo tiempo de esto ejecuta el script "configure".
Si necesitas activar/desactivar algo, relanza "configure" usando tus opciones favoritas.
Y cuando termines:
make && sudo make install
¡Eso es todo!
Si quieres experimentar con video en vivo, asegúrate de tener una cámara trabajando y activarla desde la configuración del BIOS (así es por ejemplo para eeepc 701), de otra manera no funcionará
Tus primeros pasos en FreeJ
Crea un directorio, por ejemplo "freej_tmp". Vamos a colocar algunas imágenes, videos, etc en este directorio y jugaremos dentro:
mkdir freej_tmp cd freej_tmp
Descarga esta imagen al directorio freej_tmp. Ahora lanza freej:
freej ipernav.png
Como resultado, freej comienza y muestra la imágen ipernav.png.
La interfaz de FreeJ
Freej consiste en dos ventanas:
- ventana de salida – es esta la ventana de lo que estamos mostrando, o sea nuestros videos, imágenes, etc.
ventana de consola – esta es la ventana que se usa para interactuar con freej – darle comandos, cargar imágenes, videos, etc
Desde la ventana de consola teclea ctrl-h. Verás una lista de atajos.
Como puedes ver, [ctrl+c] significa salir. Presiona [ctrl+c]. Se te pedirá confirmar que realmente quieres salir. Teclea yes [enter]
un poco mas de diversión – videos
Hace poco usamos solamente imágenes estáticas, no muy divertido. Pero del mismo modo podemos usar un video.
Descarga este video al directorio freej_tmp. Luego inicia freej:
freej kury.avi
Como resultado, freej comienza y muestra el video kury.avi.
ahora termina freej (¿recuerdas? [ctrl+c]).
Más layers
Podemos cargar tanto imágenes estáticas como imágenes en movimiento o videos.
Comienza freej con un archivo de cada tipo:
freej kury.avi ipernav.png
Como puedes ver, sólo el video es visible y la imágen estática - el archivo ipernav.png- es invisible. Vamos a entender porqué...
En FreeJ cuando tenemos abiertas dos imágenes (una estática y otra en movimiento), tenemos dos layers.
Puedes ver la lista de layers en la consola. Como puedes ver, estos layers son llamados VID (que significa: video layer) y IMG (layer de imágen estática).
La lista de layers también se muestra en la ventana de salida. Como puedes ver en la siguiente ilustración, el layer del video está por encima del layer de la imágen estática. Por eso es que no podemos ver la imágen.
Mira la ventana de la consola. Como puedes ver, uno de los layers (VID) está resaltado. Ese es layer activo. Puedes encontrar información mas detallada sobre cada layer arriba de la ventana de consola.
Allí puedes ver el nombre del archivo (kury.avi) y algunos datos más, los cuales analizaremos después.
Fíjate que current layer no significa layer superior o el layer que ahora es visible. Current layer significa únicamente layer actual.
Estando en la ventana de consola, puedes usar las teclas de flecha izquierda y derecha para cambiar el layer actual. Presiona la tecla de flecha derecha para cambiar el layer actual hacia el layer IMG. Fíjate que ahora en la parte superior de la ventana de consola puedes ver más detalles del layer de imágen estática.
Estando en la ventana de consola, puedes usar las teclas page up y page down para posicionar los layers uno encima de otro. Por lo tanto, cuando el layer actual es IMG presiona page up. Como puedes ver la imágen estática se coloca arriba, dejando la imágen estática visible en tanto que el video del pollito se vuelve invisible.
Cierra freej (con ctrl+c, como recordarás).
Algunas palabras acerca de los comandos
Digamos también algo sobre los los parámetros y el autocompletado. Algunos de los comandos de consola (p.e. CTRL-B, CTRL-E) pueden aceptar parámetros. Para mostrarlos usa el autocompletado con tan sólo presionar TAB.
Por ejemplo, presionando CTRL-B tienes:
[*] select Blit mode for the selected Layer - press TAB for completion:
y así, presionando TAB, obtienes:
[*] List available blits starting with "" RGB ADD SUB MEAN ABSDIFF MULT MULTNOR DIV MULTDIV2 MULTDIV4 AND OR XOR RED GREEN BLUE REDMASK GREENMASK BLUEMASK NEG ADDB ADDBH SUBB SHL SHLB SHR MULB BIN SDL ALPHA SRCALPHA CHROMAKEY
Cuando eliges algo, como un filtro (presionando CTRL-E), puedes también usar el autocompletado con TAB:
[*] add new Effect - press TAB for completion: 3dflippo Brightness bw0r Cartoon Contrast0r delay0r Distort0r Equaliz0r Flippo Gamma Glow Hueshift0r Invert0r Mask0Mate nosync0r pixeliz0r rotozoom Saturat0r scanline0r Sobel Squareblur TehRoxx0r Threshold0r Twolay0r Vertigo Water
Esto te dará la lista de todos los efectos.
Mezclando dos videos
Como mencionamos anteriormente, freej es para mezclar imágenes. Ahora vamos hacer eso.
Descarga otro video en el directoriofreej_tmp y luego levanta freej:
freej kury.avi term.avi
y tenemos como resultado que el video kury.avi está en el layer superior y visible. term.avi está en el layer inferior y por eso está invisible.
Ahora presiona CTRL-B y escribe red en la ventana de salida. El efecto debería verse así:
Con esto hacemos un red blit en el layer activo, puedes ver más información sobre esto en los detalles del layer en la parte superior de la ventana de consola.
Como sabes cada imágen en una pantalla de computadora tiene 3 canales: rojo, verde y azul. Red blit significa que solo el canal rojo del layer kury.avi es visible. Los canales verde y azul de este layer se vuelven transparente, por lo tanto podemos ver:
el canal rojo de kury.avi
el canal verde de term.avi
el canal azul de term.avi
De manera similar podemos usar blits verdes o azules tan solo eligiendo green o blue respectivamente como parámetros para CTRL-B. Incluso puedes intentar usar otros blits de la lista. ¡Juega a prenderlos y apagarlos!
alpha blit
Y ahora vamos a probar el alpha blit!
Como puedes ver estamos usando el alpha blit (puedes ver que así lo indica la información de la ventana del layer activo). Con alpha blit el layer activo se convierte parcialmente en transparente para que nuestro archivo term.avi sea entonces visible. Esto se debe a que el parámetro alfa es transparente:
ASBESTO ARRIVATO QUI, PADRONE.
NON FUNZIONA: Cambiamos el parámetro alfa con el mouse. Sólo presionando en la ventana de salida verás cambiar el valor númerico de alfa. Hay que notar que cuando el valor de alfa es cercano a 127, el layer activo se vuelve medio transparente.
Efectos
Inicia freej con el archivo term.avi:
freej term.avi
En la consola presiona [ctrl+e] (e, abreviatura de efecto). Verás que el cursor aparece entonces así:
Presionando la tecla [tab] verás la lista de efectos disponibles:
El efecto de Vertigo es uno muy bueno, para probarlo tan solo tienes que teclear vertigo [enter]. Verás entonces algo similar a esto:
Desactivando y borrando efectos
Echa un vistazo a la ventana de consola. Como puedes ver, el layer activo muestra un video con el archivo term.avi:
También verás que este layer tiene el efecto de vertigo:
En la ventana de consola, presiona la tecla con flecha hacia abajo para ver los detalles del filtro:
Presionando la barra espaciadora puedes desactivar temporalmente y activar este efecto. Presionando la tecla suprimir [delete] borras el efecto en este layer.
Scripting con Freej
Freej es un motor de procesamiento asíncrono de video. A través de una lista de procesual de comandos y acciones, el control de sus operaciones puede ser operado utilizando la sintaxis del lenguaje javascript orientado a objetos.
No es necesario pero muy recomendable que conozcas los principios básicos de javascript para utilizar esta característica de Freej. Te sugerimos visitar regularmente la sección de documentación para conocer más acerca de esto y también ver algunos ejemplos de código libre.
Streaming con Freej
Además de mezclar capas de imágenes, con Freej puedes también transmitir tu señal audiovisual utilizando el servidor de audio Jack.
Un ejemplo de salida via terminal sería:
freej -s 240x192 -T 7 -V 3 -i http://mad.tv:8080/freejstream.ogg -p password /dev/video0
El valor predeterminado de calidad es 16, pero en caso de que no tengas suficiente ancho de banda puedes utilizar un valor entre 6 y 9.
En los campos de servidor, puerto y password debes colocar precisamente las direcciones del servidor icecast2 y el puerto correspondiente.
Nota que en este ejemplo /dev/video0 representa el dispositivo Video4Linux de captura de vídeo. El que corresponde al audio será /dev/dsp.
En este secillo ejemplo, luego de iniciado freej deberás presionar Ctrl-W para iniciar el stream.
Para más información sobre este y otros modos de transmitir con Freej, visita el manual complementario.
Equipo FreeJ
- Denis "Jaromil" Rojo - autor y desarrollador de FreeJ
- Silvano "Kysucix" Galliani - layer TXT, encoder, streaming
- Christoph "Mr.Goil" Rudorff - Scriptabilidad, MIDI y Joystick
partes del código incluido fueron escritos por Andreas Schiffler (sdl_gfx), Jan (theorautils), Dave Griffiths (audio bus), Nemosoft (ccvt), Charles Yates (yuv2rgb), Steve Harris (liblo), Sam Lantinga (sdl_*), Jean-Christophe Hoelt (goom), L. Donnie Smith (cwiid), Olivier Debon (flash).
Documentación, pruebas y casos de estudios en usuario han sido contribuidos por Anne-Marie Skriver, Marloes de Valk, Piotr Sobolewski
Favor de referirse al archivo de AUTORES para una lista completa de contribuciones.
Comunidad
Existe una activa lista de correos para discutir en amplitud acerca de FreeJ en:
Para chat tenemos el canal #dyne en irc.dyne.org - libre acceso con SSL con el puerto 9999, manteniendo la conexión IP anónima para tu propia privacidad.
Si tienes problemas, tus preguntas o solicitudes de ayuda son bienvenidas en la lista de correos donde probablemente encontrarás algunas buenas sugerencias.
Por favor intenta no mezclar los problemas de tu sistema con los fallos de FreeJ.
Si encuentras algún fallo o bug, puedes reportarlo en el sistema de seguimiento de fallos en http://bugs.dyne.org
Descargo de responsabilidad
FreeJ es (c) 2001 - 2008 por Denis Roio
- (c) 2004 - 2005 por Silvano Galliani (c) 2005 - 2008 por Christoph Rudorff
Las Librerías estáticamente incluidas son propiedad de sus respectivos autores.
Este código fuente es software libre; puedes redistribuirlo y/o modificarlo en los términos de la Licencia Pública GNU publicada por la Free Software Foundation, tanto la versión 3 de la Licencia o (a tu elección) cualquiera otra versión posterior.
Este código fuente es distribuido con la esperanza de que sea útil, pero SIN NINGUNA GARANTÍA; ni siquiera la garantía implícita de COMERCIALIZACIÓN o UTILIDAD PARA UN PROPÓSITO PARTICULAR. Favor de referirse a la Licencia Pública GNU para mayores detalles.
Deberías recibir una copia de la Licencia Pública GNU junto con el código fuente; si no es así, escribe a: Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
Acerca de este documento
El documento original fue escrito por Piotr Sobolewski (http://www.rozrywka.jawsieci.pl/materialy/index_EN.html).
Fue revisado, ampliado, reconstruido durante el Wintercamp 09 en Amsterdam por Gabriele Asbesto Molesto Zaverio, y traducido al español por Vlax.