Instalar Skype en Linux

A veces Skype tiene algunos problemas al instalarlo en Linux, por eso voy a intentar explicar cómo instalar Skype en Linux la versión Dynamic (si Dynamic, había dicho aticipado la static pero me confundí). Primero que nada aviso que utilizo OpenSuse. Pero creo que les funcionara a todos (o la mayoría).

Primero hay que bajar el archivo.(la que esta marcada en rojo)

Cuando yo instalo programas en Linux y no hay versiones para OpenSuse o las versiones están desactualizadas o funcionan mal, solo bajo la versión sin empaquetar y tengo una carpeta en la cual coloco todos los programas comprimidos y luego los descomprimo ahí mismo. Ya que muchas veces los programas sin empaquetar (no .rpm, .deb, etc. si .zip, .gz, .tar.gz, etc) dan problemas. En mi caso guardo los programas en:

/home/writkas/programs

Si no la tienes, solo por mantener un orden recomiendo crearla.

mkdir  ~/programs

Luego muevo el archivo comprimido skype a esta carpeta y lo descomprimo. En mi caso el archivo es skype-2.2.0.35.tar.bz2

Luego le cambio el nombre (solo por orden)

cd ~/programs

mv skype-2.2.0.35 skype

Luego ejecuto el programa para comprobar si funciona

cd skype

./skype

Y en el caso de que funcione, crean un acceso directo a la carpeta /user/bin/ y así acceder fácilmente desde la consola. Tengo que estar como root.

su –

Luego de esto escribo la contraseña y luego creo el enlace directo, en mi caso:

ln /home/writkas/program/skype/skype /usr/bin/skype

Así creo un enlace directo a skype, para poder acceder fácilmente desde la consola escribiendo “skype”.

exit

skype

Y Skype debería correr.

A veces hay problemas con la arquitectura del sistema. A veces este programa tiene problemas al correr con en PCs de 64 bits. Pero en mi caso funciona, y si no funciona hay que buscar el problema. Si no funciona, puede que haya que instalar un paquete adicional.

Si les salta un error pueden dejarme el error en los comentarios y ahí vemos si podemos solucionarlo.

C Sharp (C#) – Usar Delegados – Parte 7

Hacer llamadas asíncronas usando delegados

Hasta el momento hemos hecho llamadas a métodos de forma síncrona por medio de delegados.dos caminos

¿Qué son las llamadas síncrona? Las llamadas a métodos de forma síncrona son las que siguen el patrón común de los programas de pasar a la próxima instrucción cuando se termine de ejecutar un método. Cuando se ejecuta un método se espera a que se termine la ejecución para pasar a la siguiente instrucción, se espera a que se terminen las instrucciones del método para pasar a la siguiente. Estas son las llamadas a métodos de forma síncrona, son las llamadas a métodos que se ocupan comúnmente.

¿Qué son las llamadas asíncronas? En las llamadas a métodos de forma asíncrona no se espera a que se termine la llamada para pasar a la siguiente instrucción, sino que el programa sigue pasando ordenadamente a la siguientes instrucciones sin esperar a que se termine la llamada. Una llamada asíncrona queda en una especie de hilo de ejecución aparte.

Una de las utilidades de las llamadas asíncronas es evitar que las aplicación principal se congele ya que se puede enviar una tarea pesada a que se ejecute de manera asíncrona (en un hilo de ejecución a parte). Con esto se evita a que la ejecución del programa principal se congele mientras hace una tarea pesada.

Se pueden hacer llamadas asíncronas por medio de delegados. Pero este mecanismo tiene una limitación, es que solo es valido para objetos delegados que almacenen un único método, el -objeto delegado síncrona- debe referenciar un solo método, de lo contrario dará un excepción System.ArgumentExceptión . Pero el objeto delegado que va a ser asíncrono puede referenciar a más de un método.  C Sharp cuenta con algunas clases, interfaces, delegados, etc. predefinidas en el espacio de nombres System para manejar las llamadas síncronas y asíncronas.

Tenemos un delegado, con el cual podemos crear un objeto delegado que puede almacenar un método que se quiere que sea asíncrono. El delegado es:

public delegate void AsyncCallback (IAsyncResult ar)

Tenemos una interfaz, la cual almacena información relativa al método que será llamado de forma asíncrona.

public interface System.IAsyncResult

Y tenemos dos métodos BeginInvoke y EndInvoke, que tienen todos los objetos delegados. BeginInvoke nos sirve para invocar el objeto delegado que referencia a un método síncronos y a la vez invocar un objeto delegado que referencia uno o más métodos de forma asíncrona.

IAsyncResult BeginInvoke (<parámetros>, AsyncCallback cb, Object o)

Como vemos el método ‘BeginInvoke’ devuelve un objeto ‘IAsyncResult’ que contiene información relacionada al resultado de la ejecución de los métodos asíncrona, lo veremos en el ejemplo. En ‘<parámetros>’ esta relacionado con los parámetros del tipo delegado al cual se llama con ‘BeginInvoke’. En ‘Object o’ van un objeto opcional que se le quisiera pasar a los métodos que se ejecutan de manera asíncrona.

<tipoRetorno> EndInvoke (<parámetrosRefOut>, IASyncResult ar)

El método ‘EnInvoke’ sirve para recibir el valor de retorno de los métodos que fueron llamados de manera asíncrona, para saber las excepciones (si es que hubieron). Luego veremos más.

Ahora el ejemplo:

// por Writkas
//
// Delegados5_Comentado.cs : Hacer llamadas asíncronas usando delegados
//
// Compilar en Linux con Mono:
//	gmcs Delegados5_Comentado.cs
//
// Compilar en Linux con Mono en C# 5:
//	gmcs -langversion:future Delegados5_Comentado.cs
//
// Ejecutar:
//	mono Delegados5_comentado.exe

// Recordar que en el namespace System están definidos todos las clases para el
// tratamiento de las llamadas asíncrona y también síncrona.
using System;

// Creamos un tipo delegado común y corriente
delegate void DelegadoAsíncronas (string str);

class Test
{
  public static void Main ()
  {
  // Creamos un objeto delegado común 'objDA' y le asignamos el método 'Método'
    DelegadoAsíncronas objDA = new DelegadoAsíncronas (Método1);
  // El objeto 'objDA' solo debe contener un solo método almacenado si luego se quiere
  // hacer una llamada asíncrona.

  // Se crea un objeto 'AsyncCallback' y se le añade un método 'Método2', para luego
  // enviarle este objeto con su método referenciado al objeto delegado 'objDA' que creamos
  // anteriormente.
  // A continuación se indica que es AsyncCallvack :
  // public delegate void AsyncCallback (IAsyncResult ar)
    AsyncCallback objAC = new AsyncCallback (Método2);

  // Almacena información relativa al método que será llamado de forma asíncrona:
  // public interface System.IAsyncResult
  // Se puede saber si el método asíncrona se termino de ejecutar con la propiedad:
  // public  bool IsCompleted [solo lectura]
  // Se puede saber si el método asíncrona se terminó de ejecutar de manera sícrona con:
  // public bool CompletedSyncronously [solo lectura]
    IAsyncResult objIAR;

  // Lanza la llamada al 'Método2' que está contenida en el objeto delegado 'objAC' de
  // manera asíncrona. el 'Método2' se ejecuta de manera asíncrona (en un hilo de ejecución
  // a parte), pero el método que referencia 'objDA' se ejecuta de manera síncrona.
  // 'IAsyncResult' almacenará información relacionada a ese hilo :
  // IAsyncResult BeginInvoke (, AsyncCallback cb, Object o)
  // En  van los parámetros del típo delegado.
    objIAR = objDA.BeginInvoke ("Hola", objAC, "Hola2");
  // 'objAC' contiene el o los métodos que se quiere que sean asíncronos. '"Hola2"' es
  // un argumento opcional que se le puede enviar a los métodos a ejecutar de forma
  // asíncrona. Es opcional, puede ir tanto '"Hola2"' como 'null'.

  // Cuando se ejecuta el método EndInvoke se muestran los resultados de los métodos
  // llamados, las excepciones que hubieron (si es que hubieron), etc.
  //  EndInvoke (, IASyncResult ar)
    objDA.EndInvoke (objIAR);

  // Si se terminó de ejecutar el hilo o no
    if (objIAR.IsCompleted)
      Console.WriteLine ("Se termino la llamada asíncrona");
    else
      Console.WriteLine ("Aún no termina la llamada asíncrona");

  // Si se terminó de ejecutar el hilo de manera síncrona. Se usa, ya que puede que
  // existan excepciones de las cuales no se informe. Pero esas excepciones se
  // informarán si se utiliza el método EndInvoque.
    if (objIAR.CompletedSynchronously)
      Console.WriteLine ("El hilo se termino de forma síncrona");
  // Si se termino de ejecutar el hilo de manera asíncrona
    else if (objIAR.CompletedSynchronously == false)
      Console.WriteLine ("El hilo se termino de forma asíncrona");

  // Espera a que se presione una tecla
    Console.Read ();
  }

  public static void Método1 (string str)
  {
    Console.WriteLine ("Desde Método1: {0}",str);
  }

  public static void Método2 (IAsyncResult obj)
  {
  // Se obtiene el objeto proporcionado al empezar la ejecución de la operación asíncrona :
  // public object AsyncState [solo lectura]
    Console.WriteLine ("Desde Método2: {0}", obj.AsyncState);
  }
}

La salida:

writkas@linux-xag2:~/Programacion/C#> gmcs -langversion:future Delegados5_Comentado.cs
writkas@linux-xag2:~/Programacion/C#> mono Delegados5_Comentado.exe
Desde Método1: Hola
Desde Método2: Hola2
Se termino la llamada asíncrona
El hilo se termino de forma asíncrona

writkas@linux-xag2:~/Programacion/C#>

Aquí puedes descargar los ejemplos de Delegados en C Sharp que hemos visto hasta ahora.

logo descargar

Este artículo es una parte más de una serie de artículos que trata de explicar el como usar delegados. Hasta el momento estos son los artículos ->

  1. C Sharp (C#) – Usar delegados – Ejemplo mínimo sobre delegados
  2. C Sharp (C#) – Usar delegados – Añadir y quitar métodos a un objeto delegado
  3. C Sharp (C#) – Usar delegados – ¿Cuándo se ocupan los delegados?
  4. C Sharp (C#) – Usar delegados – Acceso a miembros de delegados, añadir y quitar métodos y un ejercicio para entender los delegados en C Sharp
  5. C Sharp (C#) – Usar delegados – Usar delegados para facilitar el uso de eventos
  6. C Sharp (C#) – Usar delegados – Manejar listas de métodos que referencian los objetos delegados

.

(Parte 6: Manejar listas de métodos que referencian los objetos delegados) Artículo anterior | Artículo siguiente (Parte 7: —)

C Sharp (C#) – Usar Delegados – Parte 6

Manejar listas de métodos que referencian los objetos delegados.

En este artículo veremos:c# logo no oficial del lenguaje de programacion c sharp

  • Como manejar las listas de métodos que referencian los objetos delegados para saber sus métodos y su clase.
  • Combinar 2 objetos delegados (se combinan las listas de métodos que contienen los objetos delegados)
  • Ejecutar todos los métodos que referencia un objeto delegado.

.

El próximo código es un ejemplo puramente teórico que muestra los puntos anteriormente dichos.

// por Writkas, archivo sin derechos reservados.
//
// Delegados4_Comentado.cs : Ejemplo puramente teórico que muestra como manejar las listas
//	de métodos que referencian los objetos delegados para saber sus métodos y su
//	clase, combinar dos objetos delegados y ejecutar todos los métodos que referencia
//	un objeto delegado.
//
// Compilar en Linux con Mono:
//	gmcs Delegados4_Comentado.cs
//
// Ejecutar:
//	mono Delegados4_comentado.exe

using System;
using System.Reflection;

delegate int MiTipoDelegado (int Parámetro);

public class Programa
{
	public static void Main ()
	{
		Console.WriteLine ("Se inicia el programa\n");

		OtraClase objOtraClase = new OtraClase ();

	//	Ya que la palabra clave 'delegate' representa una clase sellada
	//	'System.MulticastDelegate', sus intancias pueden ser inicializadas como cualquier
	//	otra clase.
	//	Entonces ->
	//	MiTipoDelegado miObjDelegado1 = new MiTipoDelegado (objOtraClase.Método1);
	//	Es lo mismo que -->
		MiTipoDelegado miObjDelegado1 = objOtraClase.Método1;

		miObjDelegado1 += objOtraClase.Método2;

		MiTipoDelegado miObjDelegado2 = objOtraClase.Método3;

	//	Este es el objeto delegado que contendra los métodos de 'miObjDelegado1'
	//	y también los de 'miObjDelegado2'. Es importante asignarle un valor nulo (null)
		MiTipoDelegado miObjDelegado3 = null;

	//	Información sobre los objetos delegados tratados gracias a la clase
	//	'TratarDelegados'
		Console.WriteLine ("Mostrar información de 'miObjDelegado1'");
		TratarDelegados.InformaciónObjDelegado (miObjDelegado1);
		Console.WriteLine ("\nMostrar información de 'miObjDelegado2'");
		TratarDelegados.InformaciónObjDelegado (miObjDelegado2);
		Console.WriteLine ("\nMostrar información de 'miObjDelegado3'");
		TratarDelegados.InformaciónObjDelegado (miObjDelegado3);

	//	Combinar los objetos delegados que contienen métodos, para que los contenga
	//	un solo objeto delegado. Y mostrar información de los objetos delegados.
		Console.WriteLine ("\nLuego de combinar los objetos delegados 'miObjDelegado1'");
		Console.WriteLine ("y 'miObjDelegado2' en 'miObjDelegado3'");
		miObjDelegado3 += miObjDelegado1 + miObjDelegado2;
		Console.WriteLine ("\nMostrar información de 'miObjDelegado3'");
		TratarDelegados.InformaciónObjDelegado (miObjDelegado3);

	//	Llamar a todos los métodos de 'miObjDelegado3'
		Console.WriteLine ("\nLlamar a los métodos de 'miObjDelegado3'");
		miObjDelegado3 (5);
	}
}

public class OtraClase
{
	public int Método1 (int a)
	{
		int retorno = a + 10;

		Console.WriteLine ("Soy Método1 y mi argumento es: {0} y retorno: {1}",
		  a, retorno);

		return retorno;
	}

	public int Método2 (int a)
	{
		int retorno = a + 20;

		Console.WriteLine ("Soy Método2 y mi argumento es: {0} y retorno: {1}",
		  a, retorno);

		return retorno;
	}

	public int Método3 (int a)
	{
		int retorno = a + 30;

		Console.WriteLine ("Soy Método3 y mi argumento es: {0} y retorno: {1}",
		  a, retorno);

		return retorno;
	}
}

public class TratarDelegados
{

	public static void InformaciónObjDelegado (Delegate objDel)
	{
		Console.WriteLine ("Información del objeto delegado");

		if (objDel == null) {
			Console.WriteLine ("\tEl objeto delegado no referencia a ningún método");
			return;
		}

		foreach (Delegate d in objDel.GetInvocationList ()) {
			Console.WriteLine ("\tNombre del método: {0}", d.Method);
			Console.WriteLine ("\tNombre de su clase: {0}", d.Target);
		}
	}
}

Ahora compilar y ejecutar –>

writkas@linux-xag2:~> gmcs Delegados4_Comentado.cs
writkas@linux-xag2:~> mono Delegados4_Comentado.exe
Se inicia el programa

Mostrar información de 'miObjDelegado1'
Información del objeto delegado
Nombre del método: Int32 Método1(Int32)
Nombre de su clase: OtraClase
Nombre del método: Int32 Método2(Int32)
Nombre de su clase: OtraClase

Mostrar información de 'miObjDelegado2'
Información del objeto delegado
Nombre del método: Int32 Método3(Int32)
Nombre de su clase: OtraClase

Mostrar información de 'miObjDelegado3'
Información del objeto delegado
El objeto delegado no referencia a ningún método

Luego de combinar los objetos delegados 'miObjDelegado1'
y 'miObjDelegado2' en 'miObjDelegado3'

Mostrar información de 'miObjDelegado3'
Información del objeto delegado
Nombre del método: Int32 Método1(Int32)
Nombre de su clase: OtraClase
Nombre del método: Int32 Método2(Int32)
Nombre de su clase: OtraClase
Nombre del método: Int32 Método3(Int32)
Nombre de su clase: OtraClase

Llamar a los métodos de 'miObjDelegado3'
Soy Método1 y mi argumento es: 5 y retorno: 15
Soy Método2 y mi argumento es: 5 y retorno: 25
Soy Método3 y mi argumento es: 5 y retorno: 35
writkas@linux-xag2:~>

Eso es, espero que les sirva. Si algo no entienden, por favor no duden en escribir un comentario para hacer algunos retoques al artículo

Aquí puedes descargar los ejemplos de los delegados en C Sharp que hemos visto hasta ahora

logo descargar

Este artículo es una parte más de una serie de artículos que trata de explicar el como usar delegados. Hasta el momento estos son los artículos ->

  1. C Sharp (C#) – Usar delegados – Ejemplo mínimo sobre delegados
  2. C Sharp (C#) – Usar delegados – Añadir y quitar métodos a un objeto delegado
  3. C Sharp (C#) – Usar delegados – ¿Cuándo se ocupan los delegados?
  4. C Sharp (C#) – Usar delegados – Acceso a miembros de delegados, añadir y quitar métodos y un ejercicio para entender los delegados en C Sharp
  5. C Sharp (C#) – Usar delegados – Usar delegados para facilitar el uso de eventos
  6. C Sharp (C#) – Usar delegados – Manejar listas de métodos que referencian los objetos delegados

.

(Parte 5: Usar delegados para facilitar el uso de eventos) Artículo anterior | Artículo siguiente (Parte 7: —)

Usar FFmpeg para la codificación de videos en Linux

¿Cansado de que tus amigos te pasen esa película tan especial, pero que pesa 3 GB y que la calidad sea peor que la pantalla de tu lavadora? En este artículo encontraste la solución a todos tus problemas al codificar videos, gracias a el espectacular programa FFmpeg. Convertir video de AVI a AVI con MPEG-4, convertir video de AVI a MP4, convertir video de AVI a OGG, convertir video de AVI a RM, etc. También are una pequeña comparativa poco fundamentada pero útil para saber elegir que formato elegir para sus diferentes usos.

Un pequeño resumen de lo que es FFmpeg (según Wikipedia)

FFmpeg es una colección de software libre que puede grabar, convertir y hace streaming de audio y vídeo. Incluye libavcodec, una biblioteca de códecs. FFmpeg está desarrollado en GNU/Linux, pero puede ser compilado en la mayoría de los sistemas operativos, incluyendo Windows.

Ahora vamos aprender a usar este fabuloso programa con una interfaz gráfica de la mas modernas. (linea de commandos)

Terminal Linux

El uso que le vamos a dar a FFmpeg en este mini artículo es el de Convertir videos a diferentes formatos con FFmpeg.

¡Al grano! Los usos mas simples y útiles son los siguientes:

Si nuestro problema es el peso de los archivos de video, que consideramos como excesivo para una calidad no tan espectacular y si quieres que el archivo conserve la calidad (sin perdidas), o simplemente quieres que pese menos. La mejor opción sin usar códecs privativos es (creo) usar el códec de video H264 o también conocido como MPEG-4 parte 10.

Lo veremos en el siguiente ejemplo, uso algunos argumentos:

-i  Indico el video que quiero convertir, o también se puede decir la entrada (in)

-ab Indico la taza de bits. En el siguiente ejemplo le indique 128k que es la misma que tiene el viedeo por codificar. ¿Y por que hice esto? por que predeterminadamente el programa elige una taza de bits de 64k . Lo que empeoraría la calidad del sonido, se nota un poco.

-vcodec Indico el códec de video, en el siguiente ejemplo elegí el códec H264 o MPEG-4 part 10 . Para saber que otros códec usar puedes usar el argumento -codecs , saldrán todos los códecs de audio y video que puedes usar o no, según los paquetes que tengas instalados en tu distribución Linux. En Windows deben venir los que hay predeterminadamente. El nombre ‘libx264’ (que es el códec h264) sale ahí.

¡Importante! El nombre de entrada tiene que ser diferente al nombre de salida, si el nombre especificado con el argumento -i es igual al de salida, el programa intentara remplazar el mismo archivo que estas codificando y por lo tanto se perderá.

¡Repositorios! si no tienes instalado lo repositorios adecuados para codificar, probablemente el programa lance un mensaje diciendo que no tienes los repositorios adecuados. Necesitas los repositorios de H264/AVC Encoder, H.264/MPEG-4 Encoder. Yo en OpenSuse 11.4 tengo h264enc, libx264-115, x264 .

ffmpeg -i 'in_miPelicula.avi'-ab 128k -vcodec libx264 'out_miPelicula.avi'

.

Si nuestro problema sigue siendo el peso del archivo pero esta vez quieres comprometer la calidad del archivo para compensar un tamaño mas reducido aún. Una buena opción es codificar tu video al formato ‘MP4’. Pero

-acodec Indico el códec de audio, esta vez le dejo el mismo códec de audio que venía en el video original. Voy a usear la palabra ‘copy‘ para indicar que copio el mismo códec que venía en el video. (a veces el códec cambia un poco). En mi caso cambió de ‘mp3’ a ‘libmp3lame’. Al usar la palabra ‘copy‘ de forma predeterminada se elige la misma taza de bits que tenía el audio del video a codificar. Si necesitas cambiar la taza de bits puedes usar el argumento -ab . A veces pasa que no se pueden usar algunos argumentos como copy, puede que sea los códecs, la versión, etc. Los programadores de FFMpeg actualmente son muy activos y están siempre resolviendo bugs, añadiendo funcionalidades y reparando algunas cosas. Para asegurarse que no va a haber ningún error al empezar la codificación, es mejor saber la taza de bits y indicarlo, con -ab .

¡Repositorios! creo que solo es el de ffmpeg, pero si se necesita otro, por favor, pueden avisar en los comentarios.

ffmpeg -i 'in_miPelicula.avi' -acodec copy 'out_miPelicula.mp4'

Convertir video de AVI a OGG.

ffmpeg -i 'in_miPelicula.avi' 'out_miPelicula.ogg'

Convertir video de AVI a RM.
Solo le indico la taza de bits -ab para que conserve la calidad de sonido.

ffmpeg -i 'in_miPelicula.avi' -ab 128k 'out_miPelicula.rm'

Creo que las primeras dos formas de codificar los videos son buenas. Si están obsesionados con el peso de los archivos, y cual es mejor. Les dejo una imagen que muestra, la forma en que fueron codificados esos archivos y el peso.


Habría mucho mas que decir, todo esto de la codificación de videos, los contenedores (avi, mp3, ogg, mp4) y los códecs de audio o video, son un tema muy amplio. Es todo un universo. Al aprender un poco de esto me di cuenta que un video o audio no es una simple matriz de variable. Sino que todo esto tiene una gran complejidad y me asombra lo desapercibido que pasa el funcionamiento interno de los videos.

Problema con el sonido de XVidCap

Imagen del programa XVidCap en KDE 4.5, OpenSuse 11.3 Linux

En este artículo comentare un poco los programas que hay para grabar screencast en linux (grabar el escritorio), como hacer funcionar el sonido en XVidCap, como grabar el escritorio en linux con un PC de bajos recursos con XVidCap y algunas opciones fundamentales de XVidCap. También haré un copy & paste de algunos comentarios muy útiles, que hicieron en este post.

Se sabe que en Linux no hay programas fabulosos para grabar screencast como Camstasia Studio (en Windows). Y los programas para grabar Screencast en Linux mas populares piden muchos recursos para grabar el escritorio (RecordMyDesktop, RecordItNow) y no todos tenemos un PC en el cual sea liviano correr este tipo de programas. Y también hay muchos de estos programas que no funcionan o cuesta hacerlos funcionar.  Uno de los programas que no funciona bien en Linux es XVidCap, por que XVidCap tiene problemas al grabar sonidos por que de forma predeterminada viene configurada para el dispositivo “/dev/dsp” y creo que este dispositivo ya no se usa o el nombre tal ves esta obsoleto.

XVidCap es un excelente programa para grabar screencast ya que es uno de los pocos programas de screencast que ocupan pocos recursos en Linux. También se recomienda mucho el programa Kazam para grabar el escritorio en Linux, ya que ocupa pocos recursos. Pero no se si funciona en OpenSuse 11.3 (La distro de Linux que tengo instalada), por  lo menos en los repositorios oficiales de OpenSuse no esta. Creo que esta solo para las distros de Ubuntu.

Tengo la solución al problema de sonido de XVidCap y es solamente, que este programa apunta a un dispositivo que ya no se usa, creo. Y tiene que apuntar al dispositivo “/dev/audio” así me funciona a mi.

Para solucionar el problema con el sonido de XVidCap, escribir en un terminal (consola o pront)–>

writkas@linux-h4cu:~> xvidcap --audio_in /dev/audio

Si el sonido se escucha entrecortado es por que el programa te esta pidiendo mas recursos de los que tiene tu PC (pero este programa si pide menos recuros que RecordMyDesktop y parecidos, pero puedes bajar la taza de frames por segundo para que ocupe menos recursos de tu pc.

Bajar la cantidad de frames por segundo (fps) de XVidCap

writkas@linux-h4cu:~> xvidcap --audio_in /dev/audio --fps 8

8 Fotogramas es lo mínimo que acepta XVidCap.

Información útil sobre XVidCap.

writkas@linux-h4cu:~> xvidcap --codec-help
xvidcap, ver 1.1.7, (c) rasca, berlin 1997,98,99, khb (c) 2003-07
Codecs disponibles para captura single-frame: pgm, ppm, png, jpeg, mpeg1
Codecs disponibles para captura multi-frame: mjpeg, mpeg4, ms_div2, ms_div3, ffv1, flash_video, flash_sv, dv, mpeg2, svq1
Especifique 'auto' para utilizar el codec por defecto del formato de fichero.
writkas@linux-h4cu:~> xvidcap --aucodec-help
xvidcap, ver 1.1.7, (c) rasca, berlin 1997,98,99, khb (c) 2003-07
Codecs de audio disponibles para captura multi-frame: mp2, mp3, vorbis, ac3, pcm16
Especifique 'auto' para utilizar el codec de audio por defecto según el formato de fichero.

Configurar XVidCap en Mono o en estéreo. De forma predeterminada el numero de canales de audio en XVidCap es ‘2’ osea es ‘estéreo’ y si queremos podemos dejarlo con un solo canal ‘mono’ ¿como? –>

writkas@linux-h4cu:~> xvidcap --audio_in /dev/audio --fps 8 --audio_channels 1

Un ejemplo para configurar la resolución de XVidCap sería. Se sabe que la resolución HD es de 1280 x 720 , entonces si queremos tener esa resolución para grabar tendremos que dejarlo así, siguiendo con el ejemplo –>

writkas@linux-h4cu:~> xvidcap --audio_in /dev/audio --fps 8 --audio_channels 1 --cap_geometry 1280x720+1+1

Donde dice 1+1 es la posición de donde empieza a grabar, pensando desde el primer pixel de la parte superior izquierda. Tienes que tomar en cuenta la resolución de tu pc, por que si por ejemplo queres grabar un video de 600×600 y tu monitor es de 1000×1000 y empiezas del pixel 500 x 500, daría un error por que tu monitor no alcanza la resolución.

Algunas opciones o argumentos mas importantes de XVidCap

-v

Ejecuta  xvidcap en modo verbose. Esto proporciona más información sobre ajustes de usuario, codecs de entrada y salida, rendimiento, … Mensajes como `”missing XX milli secs ..”‘ durante la captura  significa  que  está perdiendo frames debido a la falta de recursos (frames perdidos). Esto resulta en un video que se reproducirá acelerado. Tenga en cuenta que el modo verbose ralentiza xvidcap y podría ser el causante de perdidas de frames. Pruebe a ejeutarlo sin modo verbose y observe el contador de frames perdidos.

–file nombre/patrón de fichero

El nombre/patrón de fichero a utilizar para guardar los frames capturados. Un patrón de nombre de fichero contiene un formato tipo printf() (ref. man printf) para hacer el nombre de fichero incrementable, e.g. –file out-%02d.xwd. Esto es necesario para capturas single-frame. xvidcap reemplazará la primera cadena del formato printf() con el número del frame capturado. Así pues, en el ejemplo dado, escribirá los ficheros out-00.xwd, out-01.xwd, out-02.xwd, etc. El número de frame desde el que iniciar la capturapuede ser especificado con –start_no, ver arriba.

La captura Multi-frame no necesita un patrón de fichero. Si especifica uno, no obstante como –file mymovie-%d.mpeg, xvidcap reemplazará la  cadena de formato con el número de la sesión grabación actual (siempre empezando a contar desde cero). Esto le habilitará para incrementar/disminuir manualmente ese número, o usar la característica autocontinuar (ref. –continue arriba) creando una serie de ficheros de video.

–codec codec
Invalida  las  preferencias  y la selección automática de codecs y utiliza el codec explicitamente especificado.

–cap_geometry geometría
Especifica la geometría como por ejemplo xterm, i. e. de esta manera:  widthxheight+x-position+y-position Esto invalida la anchura y altura por defecto del marco de captura. Use el botón picker del GUI en vez de esta opción de linea de comandos para ajustar el tamaño del marco de captura a una ventana. Tamaños de  captura  inferiores a 20 x 20 no parecen funcionar bién con la mayoría de codecs de captura multi-frame.

–rescale tamañoEnPorcentaje
Reescala la salida a un porcentaje del original de entrada. Un valor de 25, e. g.  hará que el  tamaño de salida sea un 25 por ciento del área original de entrada.

–quality calidadEnPorcentaje
Especifica un valor entre 0 y 100 para definir la calidad do codificación. El valor por defecto es 75.

–gui yes|no
Inicia xvidcap con o sin GUI de control overriding what’s in the preferences  file.  Ejecutandolo  sin GUI  iniciará  automaticamente  una  sesión  de  captura.  Puede pararse especificando o bien –time o –frames, o pulsando CTRL-C.

–audio yes|no
Habilita  o deshabilita la captura de audio utilizando los parámetros por defecto o aquellos guardados en el fichero de preferencias. Si está soportado, se hbilitará por defecto en las capturas multi-frame.

Por que lo saqué del la documentación del programa ‘man’  de Linux –>

Esta página del manual fué escrita por Karl H. Beckers <karl.h.beckers@gmx.net> para el proyecto xvidcap.  Esta traducción fué hecha por Imanol García Calvo.

Garantizado  el  permiso  de  copia, distribución y/o modificación de este documento bajo Los términos de la licencia de documentación libre, version 1.1 o cualquier versión posterior publicada por la Free Software Foundation; con la imposibilidad  de variar secciones y/o añadir textos en la portada o contraportada.

También si el problema persiste, hay algunos usuarios que buscaron información. Podré sus comentarios acá para complementar la información dada.

Comentarios del usuario Boioto :

gtk-recordMyDesktop (graba video + audio) y gnome-sound-recorder (graba audio) pueden grabar tanto el sonido del sistema como el del micrófono. Para elegir de donde se quiere grabar el audio hay que ejecutar (ALT+F2) gnome-volume-control, pinchar en Hardware, luego en Perfil y ahí elegir la opción correspondiente, según se quiera grabar ..:

+ el sonido del sistema:

  • a) Analog Stereo Output
  • b) Digital Stereo Duplex (IEC958)

+ el sonido del micrófono:

  • a) Analog Stereo Duplex
  • b) Digital Stereo (IEC958) Output + Analog Stereo Input

En gnome-volume-control, a veces puede ser necesario elegir “Apagado”, cerrarlo, abrirlo de nuevo, elegir la opción deseada y cerrarlo de nuevo.

Algunas de las demás opciones pueden funcionar a veces, pero pueden hacerlo a veces para grabar audio del sistema pero otras veces del micrófono. Y otras opciones pueden grabar sonido pero pueden no permitir escuchar lo grabado. Por tanto, es mejor no usar dichas opciones.

Sigue ->

Acabo de probar lo que pones writkas de, desde un terminal ejecutar:
xvidcap –audio_in /dev/audio

Pero no ha funcionado. Eso consigue lo mismo abrir el programa de forma normal (p.e. con Alt+F2, xvidcap y Enter), clic derecho sobre el nombre del fichero (por defecto test-0000.mpeg), clic en Preferencias, luego en Multi-Frame y en “Dispositivo de Entrada” cambiar /dev/dsp por /dev/audio . Creo que esta solución “manual” ya la había probado, como siempre sin éxito.

Ahora he probado lo dicho por ti, combinándolo con poner Analog Stereo Output en el Perfil del Hardware de gnome-volume-control (lo de mi anterior comentario), siguiendo sin grabar sonido. También he probado a grabar sonido del micrófono, también sin éxito (ponga Analog Stereo Output o Analog Stereo Duplex).

¡¡Lo he solucionado, por fin, con lo que dice http://ubuntu-cosillas.blogspot.com/2010/11/xvidcap-grabaciones-de-escritorio-una.html !!:

1. Se desinstala xvidcap en Synaptic
2. Se instala xvidcap con http://sourceforge.net/projects/xvidcap/files/xvidcap/1.1.7/xvidcap_1.1.7jaunty_i386.deb/download
3. Se bloquea la versión instalada en Synaptic
4. Se instala pavucontrol en Synaptic (Ubuntu 10.04; en Linux Mint 10 ya está)
5. Se abre el programa con padsp xvidcap
6. Se pone a grabar
7. Se abre pavucontrol, se va a la pestaña de Grabación y ahí se pone Monitor of Audio interno Analog Stereo

¡Listo!

Para grabar con sonido, siempre hay que arrancar el programa con padsp xvidcap (p.e. desde ALT+F2). Para que siempre sea así desde el menú se ejecuta alacarte (p.e. con ALT+F2), se va a Sonido y vídeo, luego a XVidCap Screen Capture, Propiedades y donde dice Comando se pone padsp xvidcap.

Lo dicho sirve para grabar el sonido del sistema, es decir, el que sale por los altavoces, que puede ser de una canción o película de nuestro disco duro o pendrive reproducida por Totem, de un vídeo musical en Flash de un sitio web reproducido por Firefox, etc.

Sin embargo, a veces puede ser necesario grabar el sonido del micrófono, p.e. si queremos hacer un videotutorial para explicar cómo funciona un programa. En este caso, ponemos a grabar xvidcap, abrimos el Control de Volumen de PulseAudio y, en la pestaña Grabación ponemos Audio interno Analog Stereo (sin Monitor of por delante).

Si sólo se quiere grabar sonido (sin vídeo) podemos usar gnome-sound-recorder (se ejecuta pulsando ALT+F2, poniendo gnome-sound-recorder y pulsando Enter). Seguramente la primera vez estará configurado para grabar desde el micrófono. Para grabar el sonido del sistema ejecutamos (con ALT+F2) gnome-volume-control, vamos a la pestaña Hardware y en Perfil ponemos Analog Stereo Output (también se puede hacer ejecutando pavucontrol y yendo a la pestaña Configuración).

Pero al terminar debemos volver a poner el Perfil del Hardware de gnome-volume-control (o de Configuración de pavucontrol) en Analog Stereo Duplex para que podamos seguir eligiendo desde dónde queremos grabar el sonido con xvidcap.

Nota: a veces, para cambiar de Analog Stereo Duplex a Analog Stereo Output hace falta cambiar primero a Apagado, cerrar, volver a abrir y luego cambiar finalmente a Analog Stereo Output. Ídem para el cambio al revés. Si no se hace a veces el ordenador parece que “no se entera” de que hemos hecho el cambio.

Comentarios de Paraguas Azul:

Otra opción, para no tener que andar cambiando entre Analog Stereo Duplex y Analog Stereo Output ni limitar el origen del sonido para xvidcap, es dejar siempre Analog Stereo Duplex y usar también pavucontrol cuando queremos cambiar el origen del sonido para gnome-sound-recorder. Igual que en el caso de padsp xvidcap, para cambiar desde dónde queremos grabar el sonido, ponemos gnome-sound-recorder a grabar, abrimos pavucontrol y en la pestaña de Grabación ponemos la opción deseada. En este caso no hace falta usar padsp (xvidcap lo necesita porque está pensado para OSS. padsp lo que hace es conectar OSS con PulseAudio, como se lee en http://linux.die.net/man/1/padsp).

He encontrado una solución para Ubuntu de 64 bits en http://angel-de-vicente.blogspot.com/2011/03/screencasts-with-xvidcap-in-ubuntu-1004.html . No la he probado pues mi Ubuntu es de 32 bits. Pero la dejo aquí por si vale para alguien:

Para instalarlo en mi sistema x86_64 basta con usar la opción –force-architecture en el comando dpkg -i.

usuario@equipo:~/Desktop$ sudo dpkg –force-architecture -i xvidcap_1.1.7jaunty_i386.deb

Pero al tratar de ejecutarlo veo que faltan algunas bibliotecas i386. Para instalarlas fácilmente uso el script getlibs.

usuario@equipo:~/Desktop$ padsp xvidcap
xvidcap: error while loading shared libraries: libtheora.so.0: cannot open shared object file: No such file or directory

usuario@equipo:~/Desktop$ getlibs /usr/bin/xvidcap

Hay información sobre getlibs en http://ubuntuforums.org/showthread.php?t=474790

Comentarios de Mejorandus que trata el problema de “El botón en XVidCap “Reproducir” no funciona” :

Os comento que, al menos en Ubuntu 10.04, hay un problemilla:

Cuando terminamos de grabar un vídeo, xvidcap ofrece reproducirlo inmediatamente. Pero si se pulsa en el botón “Reproducir” no pasa nada: no se reproduce el vídeo.

Esto sucede al menos en Ubuntu 10.04 porque por defecto no trae instalado mplayer, el programa que xvidcap usa de serie para reproducir los vídeos al pulsar en el botón indicado.

Hay 2 fáciles soluciones:

  1. Instalar mplayer desde Synaptic.
  2. Ir a Preferencias (pinchando con el botón derecho del ratón sobre el nombre del fichero, por ejemplo test-0000.mpeg, y luego pinchando sobre Preferencias), luego a la pestaña Comandos, y luego, bajo “Comandos de Captura Multi-Frame”, en “Comando de Reproducción” cambiamos mplayer por totem y pinchamos sobre Aceptar. Después volvemos a pinchar con el botón derecho del ratón sobre el nombre del fichero y pinchamos sobre “Guardar Preferencias”.