Record my desktop via jack.

igny
#1 por igny el 17/10/2010
Saludos a todos los foreros. Estoy utilizando el record my desktop para realizar videotutoriales. El programa me funciona bién sin jack. Cuando le pido que quiero utilizar jack para grabar el sonido de las aplicaciones que funcionan via jack(por ejemplo grabar el escritorio con sonido cuando ardour està reproduciendo las pistas) me da diversos errores:

uno puede ser: 256 error al parsear los argumentos.

otro 2816 especificación de ventanas impropias.

Puede ser algún bug del programa o hago algo mal?

Utilizo lliurex 10.09 (ubuntu studio 10.04)

Gracias de antemano por la ayuda

Salud y linux.
Subir
Pablo_F
#2 por Pablo_F el 18/10/2010
¡Hola igny!

Yo también estoy explorando todo el tema de los videotutoriales con audio a través de jack y he llegado a estas conclusiones:

No uses gtk-recordmydesktop. En cambio, puedes hacerte dos lanzadores en el panel. Uno para grabar y otro para parar.

Por ejemplo, el lanzador para grabar puede tener el siguiente comando:

recordmydesktop -x 300 -y 300 -width 480 -height 272 -fps 15 --use-jack system:capture_1 system:capture_2

y el de parar:

killall recordmydesktop

Y entonces para de grabar y empieza a codificar el video a theora (.ogv).

Lo importante del comando de arriba es la opción -"-use-jack" pero después hay que especificar los puertos. ¿Por qué system:capture_1 y 2? Porque de esta forma tendrás dos puertos de entrada, y estos puertos normalmente siempre están con este nombre y así no te va a fallar. Eso sí, después tienes que reconectar a las entradas de recordmydesktop los puertos que quieras grabar, vía patchage o qjackctl. El inconveniente es que pierdes ese tiempo en hacer las conexiones y no queda tan limpio.

Para evitar esto le puedes decir a recordmydesktop desde dónde tiene que conectar los puertos de entrada, o sea, qué audio va a grabar. Para saber los nombres de los puertos usa el comando:

jack_lsp

Entonces, imagínate que quieres grabar la salida de qsynth (pero ya tienes lanzado qsynth desde antes). jack_lsp te da entre otros:

qsynth:left
qsynth:right

Entonces el comando sería:

recordmydesktop --resto-de-opciones --use-jack qsynth:left qsynth:right

Pero entonces sólo se grabará el audio proveniente de qsynth, a no ser que conectes posteriormente más puertos a la entrada de recordmydesktop, que siempre lo puedes hacer, pero volvemos a lo mismo de antes.

Si quisieras grabar del master de ardour desde el principio:

ardour:master/out 1
ardour:master/out 2

Entonces sería:

recordmydesktop --resto-de-opciones --use jack ardour:master/out 1 ardour:master/out 2

Pero esto da un error porque hay espacios en los nombres de los puertos. Supongo que habrá algún apaño que ahora mismo no lo sé.

Lo ideal sería que recordmydesktop conectara automáticamente a sus entradas todos los puertos que estén conectados a los system: playbacks. De esta forma grabaría literalmente lo que escuchas por los altavoces, sin tener que reconectar nada.

Desgraciadamente, recordmydesktop no puede hacer esto, que yo sepa. Pero hay un truco que explicaré mañana porque hoy ya es muy tarde.

Ah otra cosa, la parte de:

-x 300 -y 300 -width 480 -height 272

depende completamente de la parte de la pantalla que quieras grabar. -x y -y indican el desplazamiento desde la esquina superior izquierda, width y height son el ancho y el alto de la ventana de grabación. Las unidades son píxeles. Si quieres grabar toda la pantalla, no pongas nada.

Otra opción interesante es: --follow-mouse

-fps son los cuadros por segundo. Puedes poner 25 ó 30 pero el video ocupará más.

En el manual encontrarás más opciones:

man recordmydesktop

Saludos, Pablo
Subir
igny
#3 por igny el 18/10/2010
Un fuerte abrazo amigo, y disculpa las molestias ocasionadas.

Un saludo.
Subir
Pablo_F
#4 por Pablo_F el 18/10/2010
Hola Igny,

No es ninguna molestia. Soy feliz enrollándome con las explicaciones y más siendo para tí, y de paso para los interesados. Estamos aprendiendo poco a poco.

Como recordmydesktop no es del todo jack-friendly y sobretodo, como comentaba ayer, no autoconecta a sus entradas lo que está conectado a las salidas de la tarjeta de audio, se puede usar otra solución, más trabajosa pero que puede dar mejor resultado: grabar el video por un lado y el audio por otro, con jack_capture. Posteriormente se integran con un editor de video. Yo he usado kdenlive pero he estado haciendo pruebas con openshot y me gusta más.

Es más, hace poco he aprendido a usar ffmpeg para capturar el vídeo de la pantalla, gracias a las instrucciones que dio el gran Autostatic en su post "Tutorial of the tutorial". Usa xephyr para tener una pantalla anidada de 1280x720 que es lo que graba. Yo no he conseguido usar Xephyr con compiz y he simplificado un poco su proceso. Al final me he quedado con este script, que guardo en /home/pablo/bin para lanzarlo como un comando más y lo asigno a un lanzador gráfico del panel:

#!/bin/bash
DATE=`date +%Y%m%d`
TIME=`date +%Hh%M`
# Start screencast
xterm -geometry 80x10+0+1000 -e jack_capture -b 24 $HOME/Semicorchux/screencasts/borrador/screencast_audio_$DATE-$TIME.wav &
ffmpeg -an -f x11grab -r 30 -s 1280x720 -i :0+374,24 -vcodec libx264 -vpre lossless_ultrafast -threads 4 $HOME/Semicorchux/screencasts/borrador/screencast_video_$DATE-$TIME.mkv

Para pararlo, con otro lanzador gráfico:

killall ffmpeg jack_capture

Esto produce dos archivos, uno de audio y otro de video, que importo a openshot. La calidad del video sale muy bien, H.264 de alta calidad. El audio es wav de 24 bit, y con la idea buena, esto es, ha capturado todo lo que estabas escuchando por los altavoces. En openshot tengo que adelantarlo 0, 5 segundos aproximadamente para sincronizar al video. Para exportar desde openshot, en la pestaña simple pongo:

Objetivo: mp4 (h.264); Perfil de video HDV 720 30p; Calidad: Alta

Igual no te hace falta tanta calidad ni en captura ni al exportar pero queda muy elegante.

Lo malo es que ffmpeg hay que compilarlo con soporte para x264. Yo seguí esta guía:
http://ubuntuforums.org/showthread.php?t=786095

De todas maneras, si quieres usar el truco de grabar el audio por separado para no tener que reconectar, con recordmydesktop puedes usar "recordmydektop --no-sound" y por lo demás tomar como modelo el script de arriba para lanzar jack_capture y para dar los nombres de archivo con fecha y hora y en el directorio elegido, que resulta muy útil.

Saludos, Pablo
Subir
igny
#5 por igny el 18/10/2010
Vaya post amigo Pablo, de gran ayuda como siempre. Menudo curro te has pegado compañero.


Gracias, como siempre por tu desinteresada amabilidad.


Cuidate mucho.

Un abrazo.

Xavi.
Subir
igny
#6 por igny el 19/10/2010
Por cierto, amigo, si lanzo el comando desde la consola, para probar la primera de las opciones me devuelve esto:

fxavier@fxavier-desktop:~$ recordmydesktop -x 300 -y 300 -width 480 -height 272 -fps 15 --use-jack system:capture_1 system:capture_2
Error when parsing `-width': libpopt error: -11

Creo que la opción de grabar video primero y luego añadirle el audio empieza a tener más peso.

Un saludo y muchas gracias Pablo.

Xavi
Subir
Pablo_F
#7 por Pablo_F el 19/10/2010
Hola,

Prueba con doble guión, así:

$ recordmydesktop -x 300 -y 300 --width 480 --height 272 --fps 15 --use-jack system:capture_1 system:capture_2

A mí me funciona con guión simple (?) pero según el manual la sintaxis correcta es doble guión para estos parámetros, también para fps.

Saludos, Pablo
Subir
José GDF
#8 por José GDF el 22/10/2010
A mi lo que me da al tipear en la consola, con Jack ya funcionando, es esto:

[code]Error parsing arguments.
Type --help or -h for usage.[/code]

Sin sonido me funciona bien, con el comando recordmydesktop --nosound, así que no se qué puedo estar haciendo mal.

La verdad es que lanzando la aplicación gráficamente casi nunca me ha funcionado ni sin sonido, y tengo ganas de mostrar un día de lo que es capaz Rakarrack con un buen video, así que la posibilidad de ejecutarlo con la consola se me hace muy tentadora. De momento ya he tecleado recordmydesktop --help para averiguar los comandos del programa, y muchos no tienen desperdicio:

[code]gdf@gdf-port:~$ recordmydesktop --help

Usage:
recordmydesktop [OPTIONS]^filename


General Options:
-h or --help Print this help and exit.
--version Print program version and exit.
--print-config Print info about options selected during compilation and exit.

Image Options:
-windowid id_of_window id of window to be recorded.
-display DISPLAY Display to connect to.
-x X Offset in x direction.
-y Y Offset in y direction.
-width N Width of recorded window.
-height N Height of recorded window.

-dummy-cursor color Color of the dummy cursor [black|white]
--no-cursor Disable drawing of the cursor.
--no-shared Disable usage of MIT-shared memory extension(Not Recommended!).
--full-shots Take full screenshot at every frame(Not recomended!).
--quick-subsampling Do subsampling of the chroma planes by discarding,not averaging.
-fps N(number>0.0) A positive number denoting desired framerate.

Sound Options:
-channels N A positive number denoting desired sound channels in recording.
-freq N A positive number denoting desired sound frequency.
-buffer-size N A positive number denoting the desired sound buffer size (in frames,when using ALSA or OSS)
-ring-buffer-size N A float number denoting the desired ring buffer size (in seconds,when using JACK only).
-device SOUND_DEVICE Sound device(default hw:0,0).
-use-jack port1 port2... portn Record audio from the specified
list of space-separated jack ports.
--no-sound Do not record sound.

Encoding Options
--on-the-fly-encoding Encode the audio-video data, while recording.
-v_quality n A number from 0 to 63 for desired encoded video quality(default 63).
-v_bitrate n A number from 45000 to 2000000 for desired encoded video bitrate(default 45000).
-s_quality n Desired audio quality(-1 to 10).

Misc Options:
-rescue path_to_data Encode data from a previous, crashed, session.
--no-wm-check Do not try to detect the window manager(and set options according to it)
-pause-shortcut MOD+KEY Shortcut that will be used for (un)pausing(default Control+Mod1+p).
-stop-shortcut MOD+KEY Shortcut that will be used to stop the recording (default Control+Mod1+s).
--compress-cache Image data are cached with light compression.
-workdir DIR Location where a temporary directory will be created to hold project files(default $HOME).
-delay n[H|h|M|m] Number of secs(default),minutes or hours before capture starts(number can be float)
--overwrite If there is already a file with the same name, delete it
(default is to add a number postfix to the new one).
-o filename Name of recorded video(default out.ogv).

If no other options are specified, filename can be given without the -o switch.
[/code]

¿Qué puedo estar haciendo mal con Jack, Pablo?

Un saludo.

EDITO: me ha podido la impaciencia y me he puesto a trastear sin haber leído antes los anteriores posts. Efectivamente, con recordmydesktop man hay mucha más información :) Muchas veces peco de impaciente.

VUELVO A EDITAR: he probado el mismo comando, pero con un solo guión antes de fps:

[code]recordmydesktop -fps 15 -use-jack system:capture_1 system:capture_2[/code]

Era ese guión de más el que no me dejaba continuar... De hecho, en el manual lo pone bien claro:

[code]-fps N(number>0.0)[/code]

¡Ahora ya puedo conectar la salida de Rakarrack a RecordMyDesktop! ¡Je, je, je! Gracias, Pablo. 8)
Subir
Pablo_F
#9 por Pablo_F el 23/10/2010
Menos mal!

Vaya lío con los guiones. Desde luego lo mejor es seguir las instrucciones del man o de la opción --help en vuestros propios ordenadores que hacerme caso sin más.

De todas formas, con el método propuesto por Autostatic que comento más arriba (capturar el escritorio con ffmpeg en lugar de recordmydesktop) y el sonido por separado, vais a notar una mejora en la calidad, lo que pasa es que es un rollo porque hay que compilar ffmpeg y demás. Si merece la pena o no, no lo sé pero este video de youtube sobre cómo usar un vocoder en qtractor está grabado con este método. Se lee bastante bien la letra pequeña sin que haya utilizado zooms de pantalla y se ve todo el escritorio, no sólo una ventana recortada. En pantalla completa se ve muy bien.

Aquí hay una demo de LMMS capturada con recordmydesktop y usando jack. La verdad es que la calidad del video no está nada mal tampoco. Antes de empezar con LMMS se ve cómo hace las conexiones de audio en patchage y eso es lo que me parece que no queda tan elegante, aunque bueno, siempre se puede recortar esa parte del video. O mejor dejarla, como demo de patchage que es mucho más cómodo y agradable que qjackctl para hacer las conexiones virtuales.

EDITO: En realidad, lo que se muestra no es patchage sino gladish, cuya interfaz de conexiones es muy similar.

En total que hay muchas formas de hacerlo. A ver esos videos de Rakarrack. Estaremos atentos a tu blog.

Saludos, Pablo
Subir
igny
#10 por igny el 23/10/2010
Enhorabuena Jose. Ya lo tienes. Yo voy a intentarlo.
Amigo Pablo, gracias por tu interés .

Saludos.
Subir
José GDF
#11 por José GDF el 24/10/2010
Una duda me ha salido ahora:

Las pruebas del otro día las hice con el portátil, de arquitectura i386, con Jaunty. Todo funcionó bien, incluida la captura de audio.

Ahora intento lo mismo con mi amd64 de sobremesa, con Karmic, precisamente el que más falta me hace que funcione, y me sale esto, al teclear el comando recordmydesktop -fps 15 -use-jack system:capture_1 system:capture_2:

[code]recordMyDesktop is not compiled with Jack support![/code]

He buscado en Synaptic, y no encuentro qué paquete podría ser el que necesito para que RecordMyDesktop funcione con Jack. ¿Tienes idea de qué puedo estar pasando por alto, Pablo?
Subir
Pablo_F
#12 por Pablo_F el 24/10/2010
Hola José.

No estás pasando nada por alto. Es lo que pone en el mensaje. Por lo que sea, el paquete de recordmydesktop para karmic fue compilado sin soporte para jack.

Yo en karmic estoy usando el paquete del PPA de Autostatic, a ver si esto funciona para tí:

sudo add-apt-repository ppa:autostatic/ppa
sudo apt-get update
sudo apt-get install recordmydesktop

De paso, como puedes ver, en esto repo hay versiones bastante recientes de rakarrack y guitarix para karmic.

Saludos, Pablo
Subir
José GDF
#13 por José GDF el 25/10/2010
Amigo Pablo, mi error es no actualizarme a Lucid o a Maverick cuanto antes, me estoy perdiendo muchas cosas. Hoy he probado Maverick en el amd64 con el liveCD y es una pasada... He hecho estas mismas pruebas en la sesión live, casi todas han ido bien, pero cuando quería usar Jack para grabar el sonido no me dejaba por una cuestión más que comprensible de falta de recursos.

Pues eso, a ver si me actualizo, que con tus consejos y el sistema actualizado, tengo el éxito casi garantizado. ¿Cuando? No lo sé todavía...

Volveré para contaros 8)
Subir
G*
#14 por G* el 01/11/2010
--
Hola, tienen idea de que es lo que sucede cuando el sistema me reporta:
[code]Window size specification out of bounds!(current resolution:1360x768)[/code]
Luego de ejecutar:
[code]~$ recordmydesktop -x 300 -y 300 --width 480 --height 272 --fps 15 --use-jack system:capture_1 system:capture_2[/code]
sin digitar:
[code]--use-jack system:capture_1 system:capture_2[/code]
La grabación se ejecuta normalmente.
Gracias.
--
Subir
Pablo_F
#15 por Pablo_F el 02/11/2010
Hola,

Pues no hay más. O recordmydesktop está reportando mal, o realmente estás intentando grabar fuera de los límites de tu resolución de pantalla. Prueba sin especificar la esquina superior izquierda (parámetros x e y) ni el tamaño de la ventana.

Saludos, Pablo
Subir
Hilos similares
Nuevo post

Regístrate o para poder postear en este hilo