lunes, 19 de marzo de 2012

ScreenCast usando FFMPEG

Hace bastante no toco el blog (bastante bastante tiempo :P) me dieron ganas de darle otra chance. Haciendo un resumen en este tiempo, me instale en Arch un tiempo y luego me pase a Gentoo por unos 6 meses, gran experiencia, poniéndole deificación aprendes muchisimas cosas, pero decidí volver a Arch (y sigo acá) porque si bien aprendes muchas cosas en Gentoo y en un principio es entretenido, luego de que te topas con problemas bastante "chotos" una y otra vez en la compilación principal mente (siempre había un problema) se vuelve tedioso y si a eso le sumas el tiempo que lleva compilar todo es mas tedioso aun, así que decidí volver a ArchLinux devuelta, dejar de lidiar con eso y arrancar con los binarios otra vez (tampoco hay una gran diferencia en rendimiento, que realmente compensara la practicidad de los binarios).

Pasando al tema de la entrada, ultima mente estuve haciendo algunas pruebas para hacer un poco de ScreenCast y pense porque no compartirlo, tuve un par de problemas en un principio con el audio y no encontré en ningún lado que realmente me diera una solución para ello, por esas casualidades encontré la solución en alguna linea suelta perdida en algún foro... pero bueno, la idea es compartir algo un poco mas simple de lo que vi por ahí (hay otras alternativas, pero esto esta pensado para los que usamos OSS4 y quieran grabar sonido).

Bueno primero que nada no voy a utilizar solamente FFMPEG, si bien podría la idea es hacerlo sencillo, con el FFMPEG podes elegir en que área de la pantalla quieras grabar, pero es algo tedioso hacerlo si por ejemplo quieres grabar una ventana en especial y cada vez que la abres la ventana se movio de lugar, básicamente usas xwininfo, seleccionas la ventana y con las coordenadas las usas en FFMPEG, no voy a entrar en mucho detalle pero es algo tedioso si hay que hacerlo una y otra vez. Buscando lo que encontré fue el FFCast que hace ese trabajo por uno, podes seleccionar un área o una ventana cada vez que vas a grabar, lo cual es bastante practico y te ahorra algún que otro dolor de cabeza, el FFcast también funciona con otros, recordmydesktop (no pude grabar audio con OSS4) se que es uno. En este caso voy a utilizar x264 y mp3, pero hay gran variedad que pueden usar pueden ver los codecs que tienen disponibles con:

ffmpeg -codecs
Creo que la forma mas fácil de explicar de forma sencilla como hacerlo es mostrando el comando básico que uso para grabar, seria algo así:

ffcast -w % ffmpeg -f oss -i /dev/dsp -f x11grab -r 30 -s %wx%h -i %d+%x,%y -i :0.0 -acodec libmp3lame -async 1 -vcodec libx264 -preset ultrafast -crf 0 -threads 0 /lugar/donde/guardar.mp4
Esto seria básicamente un comando básico para grabar un ScreenCast, explicado cosa a cosa:

"-w" le esta pasando la opción al FFCast para que pida seleccionar una ventana a la hora de grabar, basta con hacer click en una ventana y comenzara a grabar esa ventana, también se puede utilizar "-s" que básicamente antes de comenzar a grabar te pide que selecciones un area.

"%" basicamente quiere decir que le vas a pasar otros comandos al FFMPEG en este caso.

"-f oss -i /dev/dsp" básicamente se le esta diciendo que grabe el sonido usando OSS desde /dev/dsp, podria ser /dev/dsp_out o lo que sea, dependiendo que quieras grabar, yo utilizo OSS4 pero para los que utilizan alsa seria algo asi "-f alsa -ac 1 -i hw:1" en caso de usar solo alsa y "ffmpeg -f alsa -ac 1 -i pulse" en caso de usar Pulseaudio.

"-f x11grab" básicamente que grabe el escritorio.

"-r 30" acá seleccionas los fps a los que quieras grabar.

"-s %wx%h -i %d+%x,%y -i :0.0" revolución, área a grabar y el display, de las primeras 2 se encarga el FFCast siempre y cuando pongan eso, sino iría lo que saquen de xwininfo.

"-acodec libmp3lame" codec de audio, en este caso mp3, pueden utilizar lo que gusten, también pueden pasarle otras opciones, miren la documentacion de FFMPEG.

"-async 1" esto era lo que les comentaba, sin esta opción el audio queda totalmente desincronizado en mi caso, esto básicamente lo arregla.

"-vcodec libx264 -preset ultrafast -crf 0 -threads 0" el codec de video a utilizar en este caso x264, el preset tiene que ser ultrafast (hay fast, slow, etc) sino no llega a grabar correctamente a la cantidad de fps deseados, les va a dar un archivo grande, casi sin compresion que se puede achicar luego usando el preset slow otro codec o lo que quieran, "-crf 0" basicamente el nivel de compresion, a mas alto menor calidad, pueden poner un valor mas alto pero creo que es conveniente hacerlo en una segunda instancia, por ultimo "threads 0" básicamente la cantidad de hilos a utilizar, 0 lo calcula automaticamente.


Eso seria lo básico, pueden cambiarle los codecs o pasarle otras opciones, va a gusto del consumidor, según mis pruebas (que no fueron demasiadas) eso fue lo que mejor se ajusto a mis necesidades (que son básicamente grabar juegos :P). Luego si quieren tener un archivo mas chico pueden usar ffmpeg devuelta por ejemplo algo así:

ffmpeg -i grabacion.mp4 -acodec libmp3lame -ab 128k -ac 2 -vcodec libx264 -preset slow -crf 10 -threads 0 salida.mp4
Si quieren cortar algo (seguro que el principio y el final, seguro se les superpone algo, o no quieren mostrar cuando arrancan a grabar o terminan) les recomiendo utilizar el OpenShot o el Pitivi, es lo mas sencillo y practico para mi.

lunes, 4 de octubre de 2010

Dividir, unir y comprobar archivos

Por culpa de cierta persona tuve que bajar lo que había subido (lo que había comentado en la entrada anterior) asi que tuve que usar estas cosas (ya había usado split para dividir los archivos en realidad).
Primero que nada dividir archivos, esto es algo bastante simple hay un comando llamado split que se encarga de hacer esto, dejo el help de este:

Usage: split [OPTION]... [INPUT [PREFIX]]
Output fixed-size pieces of INPUT to PREFIXaa, PREFIXab, ...; default
size is 1000 lines, and default PREFIX is `x'.  With no INPUT, or when INPUT
is -, read standard input.

Los argumentos obligatorios para las opciones largas son también obligatorios
para las opciones cortas.
  -a, --suffix-length=N   utiliza sufijos de longitud N (por omisión 2)
  -b, --bytes=TAMAÑO      escribe TAMAÑO bytes en cada fichero de salida
  -C, --line-bytes=BYTES  escribe un máximo de BYTES bytes sin cortar líneas
  -d, --numeric-suffixes  utiliza sufijos numéricos en vez de alfabéticos
  -l, --lines=NÚMERO      pone NÚMERO de líneas en cada fichero de salida
      --verbose           print a diagnostic just before each
                            output file is opened
      --help     muestra esta ayuda y finaliza
      --version  informa de la versión y finaliza

SIZE may be (or may be an integer optionally followed by) one of following:
KB 1000, K 1024, MB 1000*1000, M 1024*1024, and so on for G, T, P, E, Z, Y.

Report split bugs to bug-coreutils@gnu.org
GNU coreutils home page:
General help using GNU software:
Report split translation bugs to
For complete documentation, run: info coreutils 'split invocation'
En mi caso lo que hice fue:
split -b 200m -d Archivo.7z Archivo.7z.
Así quedarían unos archivos de 200mb y con un sufijo numerico (01, 02, etc).

Luego para unir los archivos usamos el comando cat, basta con hacer esto:
cat Archivo.7z.*** > Archivo.7z
Los asteriscos representa todos los archivos con esa parte de la extención de comodín digamos (001,002, etc) para no tener que poner uno por uno.

Luego esta el comando md5sum que sirve para comprobar el md5 del archivo, básicamente ponen md5sum archivo.7z y les tira una serie de números y letras, si el que lo bajo/paso/etc tiene exactamente el mismo el archivo esta bien, les recomiendo poner el de todos los archivos en un txt para que la otra persona lo pueda comprobar.

domingo, 26 de septiembre de 2010

Plowshare, gestor de descargas y subidas

Precisaba subir unas cosas y realmente me molestaba tener que subir una por una las cosas, así que me puse a buscar algun gestor de subidas en AUR y me encontré con este.
Plowshare no es mas que un gestor de descargas y subidas por linea de comandos, tiene soporte para captchas y varios servidores, ademas cuenta con soporte para varios archivos.

Actualmente tiene soporte para estos servidores:
115.com 2Shared 4Shared Badongo DepositFiles divShare dl.free.fr FileFactory Humyo Mediafire Megaupload Netload.in Rapidshare Sendspace Storage.to Uploaded.to Uploading.com Usershare x7.to ZShare
Este esta en AUR así que no van a tener mucho problema en instalarlo, amenos en Archlinux igualmente esta el tgz y un deb en la pagina ademas aca pueden encontrar ejemplos de como usarlo.

viernes, 17 de septiembre de 2010

Usar botones "+" y "-" del Logitech G3, G5, G7 y G9.

Normalmente estos botones son usados para cambiar las DPI, pero en Windows gracias al Setpoint estos se pueden usar como botones normales, bastante útil para algunos. Lograr esto en linux es un poco mas complicado ya que no contamos con el Setpoint (existe algo llamado Hidpoint que seria una especie de Setpoint, pero nunca pude hacerlo funcionar correctamente, y en Archlinux posiblemente nunca funcione), aun así hay una forma de hacerlo, usando el g5hack que básicamente lo que hace es transformarte estos en botones comunes y corrientes, lo pueden bajar de acá:
http://piie.net/temp/g5_hiddev.c
Luego lo compilan usando gcc:
gcc -o g5hack g5_hiddev.c
Luego para usarlo basta con poner en la consola:
g5hack /lugardeldispositivo dpi (0=400 1=800 2=1600 3=2000 para el G5 y hasta 7 para el G9, 7=3200)
Ya no podrán cambiar las dpi, pero tienen 2 botones mas :)

viernes, 3 de septiembre de 2010

Teamspeak2

Es bastante simple aunque el TS2 tiene un pequeño problema hoy en dia ya que usa OSS y no Alsa que es lo que suelen usar las distros hoy en dia (pulseaudio ahora mismo, que usa alsa).

Para instalarlo solo hay que bajarlo de los repositorios usando el gestor de paquetes que use la distribucion que estan usando o el que prefieran, por lo general esta en repositorio asi que no van a tener mucho problema. El paquete seria teamspeak.

Una ves instalado van a tener distintas formas de hacerlo funcionar segun lo que usen, oss, alsa, pulseaudio, jack (ni idea si tiene algun problema), etc.

Usando OSS no van a tener problema alguno, va a funcionar tranquilamente, si no les funciona el microfono basta con ir al control de volumen y subir el volumen de grabacion (no el de reproduccion del microfono, ahi solo escucharian ustedes).

Usando Alsa hay que abrir el TS con aoss, bastaria con un aoss teamspeak en la consola. Aoss es basicamente una emulacion de OSS usando Alsa, para no entrar en mucho detalle.

Usando Pulseaudio van a tener que hacer basicamente lo mismo que con Alsa solo que usando padsp.

Luego hay una cuarta opcion, que anda sin problemas que es usar wine para el TS de windows, lo instalan y en las opciones de wine (winecfg) seleccionan alsa, y quedaria andando, en su momento tuve que recurrir a esta opcion, ya que tenia un problema con el sonido del TS, se entrecortaba todo, sobre archlinux no tuve este problema.

Dolphin-emu en Archlinux

Para el que no conosca el Dolphin es un emulador de Gamecube y Wii multiplataforma (Linux, Mac y Windows) que realmente funciona muy bien, sacando algun error aca y alla se puede jugar a todo (aveces hay que buscar alguna revision especifica, pero nada grave), en AUR esta todo para que te descargue del svn las revisiones, creo que el paquete se llama dolphin-emu-svn, si quieren pueden hacerlo asi, aunque personalmente prefiero ir bajando y guardando ciertas revisiones, esto ultimo es lo que voy a explicar como hacer (esto puede que los anime a conseguir cosas de otras svn).

Vamos a necesitar ciertas cosas para poder bajarlo y compilarlo, básicamente esto:

scons
svn
glew
libao
libgl
libxxf86vm
mesa
nvidia-cg-toolkit
sdl
wiiuse
wxgtk-gcc43

Creo que esta todo en los repositorios oficiales, sino esta en AUR lo que falte.
Una ves tengan todo eso hay que disponerse a bajar la revisión que queramos del svn para ello usamos valga la redundancia svn.

svn checkout http://dolphin-emu.googlecode.com/svn/trunk/ dolphin-emu-read-only

Si usamos la opción -r XXXX podemos bajar alguna revisión en particular, se pueden fijar el google code los cambios que fueron haciendo en cada revisión, suelen salir unas cuantas por día así que les recomiendo que le sigan la pisada.

Ahora hay que compilar para ello hay que usar scons, primero nos movemos a la carpeta dolphin-emu-read-only y luego compilamos.

scons flavor=release

Muchas veces les va a pasar que no pueden compilarla, por lo general es porque en alguna revisión se "rompió" la compilación sobre Linux, les recomiendo ir al svn y comentarlo ahí, por lo general lo arreglan el mismo dia, sino pueden bajar alguna otra revisión que si puedan compilar.
Una vez echo esto simplemente tienen que ir a /Binary/Linux-XXX/ y ejecutan el dolphin-emu, ponen un juego toquetean un poco las configuraciones (les recomiendo ir al foro de dolphin) y se ponen a jugar, les comento que tiene soporte para el wiimote y otros controles de Wii, se que funciona sobre Linux pero realmente nunca tuve uno acá como para testearlo, si quieren probarlo en el foro hay un poco de información.

Comentario aparte, ya que puede que lo arreglen en alguna versión mas nueva o algo, hay un pequeño problema con la librería libx11, si ven que el juego empieza a andar y al rato se congela, van a notar que agrandando y achicando la ventana empieza a andar devuelta, esto es por un problema con las versiones recientes de esta librería, lo que pude testear con la 1.3.4 y la 1.3.5 se presenta este problema, hice un downgrade con la 1.3.2 y anduvo de maravillas. Para hacer un downgrade de esta tienen varias formas, yo opte por bajar la versión vieja de este e instalarlo usando pacman (tuve que forzarlo ya que otras dependían de esta, igualmente podrían downgradear esos otros tambien cosa que yo no hice, igualmente no tuve problema alguno, no que notara al menos), igual hay varias formas de hacerlo, les dejo la wiki done hay mas información sobre esto.

Es básicamente todo, con esto van a poder disfrutar de juegos nuevos sobre archlinux, y realmente anda muy bien.

domingo, 1 de agosto de 2010

Arch



Hace unos días me pase a Arch, así que voy a empezar a enfocarme un poco mas en este, la razón de esto, necesidad de aprender mas, para el que no lo sepa Archlinux tiene la consigna de que el usuario es el que administra y lleva el sistema a sus propias necesidades; ¿que quiere decir esto?, bueno básicamente que el usuario tiene total control sobre el sistema, eso acarrea muchas cosas, una de ellas es que uno va a tener que hacer las cosas por si mismo (acá es donde entra la parte de aprendizaje), cuando instalamos algo en otra distribución por lo general no vemos una gran cantidad de cosas que se hacen y no nos damos cuenta, por ejemplo, asignar a los usuarios en los grupos correspondientes, agregar algo a las configuraciones del sistema, crear usuarios, editar scripts, re-compilar algo, etc... todas esas cosas las vamos a tener que hacer nosotros en su gran mayoría, esto puede parecer algo engorroso pero tiene la ventaja que podremos moldear a nuestro gusto la mayoría de las cosas ademas de hacerlo mas eficiente.
Simplicidad sobre comodidad, otra de las cosas que busca es la simplicidad, pero simplicidad en el código, no rellenar con parches, mejoras visuales, etc... cosas que sobrecarguen el código y lo alejen de lo simple, esto lo va a ser mas eficiente por lo tanto todo va a ser mas liviano. También una base simple, con lo mínimo necesario, apartir de esto uno tiene que construir todo, a la hora de instalar el sistema uno va a tener que hacer todo de cero, conseguir las cosas por el medio que quieran e ir construyendo a partir de eso lo que uno quiera con todas las opciones disponibles para su configuración.

Me encontré un sistema excelente, mas de lo que esperaba, con muchas opciones, herramientas, y mucha información, tiene la documentación mas completa que vi ademas de una gran cantidad de usuarios que saben de lo que están hablando, realmente es muy útil sumergirse en la wiki y en los foros de Arch, realmente les recomiendo que lo prueben, puede que los primeros días estén algo mareados, pero después todo empieza a encajar y se hace bastante entretenido, ademas de aprender muchas cosas que realmente no tenia idea de como funcionaban.
Voy a tratar de armar algo para mostrarles un poco mas y tratar de compartir las cosas que fui haciendo, por ahora les recomiendo que le den un vistazo a la wiki y si se animan lo prueben, no desistan si se animan a probarlo y no les pareció del todo fácil, como dije, se van a sentir algo mareados al principio.