PDA

Ver la Versión Completa : Grabador de escritorio (ffmpeg+perl/tk)



Defton
04-sep-2011, 10:13
Bueno pues como gtk-recormydektop ya no me satisface ( el video se graba muy rapido ) y al no poder utilizar ni stanbul, xvidcap,etc,etc,etc.
me decidí a crear este pequeño script para poder utilizar ffmpeg para hacer mis screencast, espero le sea de utilidad a alguien.


http://img843.imageshack.us/img843/2628/sp2n.png




#!/usr/bin/perl
use warnings;
use strict;
use Tk;
#Creado Por DarkSpark
my $ventana_main=MainWindow->new();
$ventana_main->resizable('FALSE','FALSE');
my $title=$ventana_main->title('Grabar escritorio');
my $texto=$ventana_main->Label(-text=>"Ingresa el nombre del archivo donde se guardara el video")->grid(-column=>0 , -row=>0);
my $n_archivo = $ventana_main->Entry(-width => 20)->grid(-column=>1 , -row=>0);
my $boton_start=$ventana_main->Button(-justify=>'center',-text=>'Start',-command=>\&start)->grid(-column=>0,-row=>1);
my $boton_start=$ventana_main->Button(-justify=>'center',-text=>'Stop',-command=>\&stop)->grid(-column=>1,-row=>1);
MainLoop();

sub start{
my $archivo=$n_archivo->get();
my $ls= `ls ~`;
if ($ls=~/$archivo/){
my $dialog = $ventana_main->Dialog(-title => "Error",-buttons => ["Aceptar"],-text=>"el archivo ya existe\ncambie el nombre del archivo");
my $item = $dialog->Show();
}
else{
system("ffmpeg -async 1 -f oss -i /dev/dsp -f x11grab -s 1360x768 -r 24 -i :0.0 -sameq ~/$archivo.mpg &"); #OJO EDITAR LA OPCIÓN -s PARA QUE COINCIDA CON LA RESOLUCIÓN DE TU PANTALLA
}
}
sub stop{system("killall ffmpeg");}


esta configurado para la resolución de mi pantalla (1360x768) solo ay que modificarlo para ajustar la resolución.
Tambien graba el audio del microfono.

Dependencias:
Perl/tk
ffmpeg


modo de uso
>perl ff-desktop.pl

DiabloRojo
04-sep-2011, 16:32
Para que la gente NO tenga que andar editado el script te sugiero que obtengas la máxima resolución con el comando xrandr
xrandr | grep '*+' | cut -c 4-12

De tal manera que el comando quedaría así:
system("ffmpeg -async 1 -f oss -i /dev/dsp -f x11grab -s `xrandr | grep '*+' | cut -c 4-12` -r 24 -i :0.0 -sameq ~/$archivo.mpg &");
O se puede utilizar una variable
$maxima=`xrandr | grep '*+' | cut -c 4-12`
system("ffmpeg -async 1 -f oss -i /dev/dsp -f x11grab -s $maxima -r 24 -i :0.0 -sameq ~/$archivo.mpg &");

Evidentemente es todo teoría, solo queda probarlo.

PD: Nos vamos a la sección de Scripts.

JoeTux
04-sep-2011, 21:51
A mi el comando xrandr me tira lo siguiente:

joel@dhcppc1:~> xrandr
xrandr: Failed to get size of gamma for output default
Screen 0: minimum 320 x 240, current 1280 x 1024, maximum 1280 x 1024
default connected 1280x1024+0+0 0mm x 0mm
1280x1024 50.0* 51.0
1280x960 52.0
1152x864 53.0
1024x768 54.0 55.0 56.0
832x624 57.0
800x600 58.0 59.0 60.0 61.0
700x525 62.0 63.0
640x480 64.0 65.0 66.0 67.0 68.0
512x384 69.0 70.0
400x300 71.0
320x240 72.0 73.0
joel@dhcppc1:~>

... es decir no encontraría la cadena '*+' en mi caso al menos, pero funciona con '*', pero me tira una linea de error antes:

joel@dhcppc1:~> xrandr | grep '*' | cut -c 4-12
xrandr: Failed to get size of gamma for output default
1280x1024
(se podría arreglar eso con otra con otra variable o bien algun comando que filtre la linea de error que sale)


Respecto al script en sí, funciona muy bien, en mi caso cambiando la resolución manualmente a 1280x1024. Se agradece, aunque hace ya bastante tiempo que no capturaba video de mi escritorio :aplausos:
Saludos

PD: Creo que sería una muy buena idea para hacer un plasmoide en KDE :scratchch

Defton
05-sep-2011, 06:02
Para que la gente NO tenga que andar editado el script te sugiero que obtengas la máxima resolución con el comando xrandr
xrandr | grep '*+' | cut -c 4-12

De tal manera que el comando quedaría así:
system("ffmpeg -async 1 -f oss -i /dev/dsp -f x11grab -s `xrandr | grep '*+' | cut -c 4-12` -r 24 -i :0.0 -sameq ~/$archivo.mpg &");
O se puede utilizar una variable
$maxima=`xrandr | grep '*+' | cut -c 4-12`
system("ffmpeg -async 1 -f oss -i /dev/dsp -f x11grab -s $maxima -r 24 -i :0.0 -sameq ~/$archivo.mpg &");

Evidentemente es todo teoría, solo queda probarlo.

PD: Nos vamos a la sección de Scripts.


Excelente, estaba buscando la manera de hacer eso, Gracias DiabloRojo. también quiero agregarle un indicador para que marque cuando esta grabando y cuando no, y ver la posibilidad de que se minimice ya sea en el systray o si no por lo menos en la barra de tareas, pero eso sera para la siguiente versión ;)

DiabloRojo
05-sep-2011, 12:47
... es decir no encontraría la cadena '*+' en mi caso al menos, pero funciona con '*', pero me tira una linea de error antes:

joel@dhcppc1:~> xrandr | grep '*' | cut -c 4-12
xrandr: Failed to get size of gamma for output default
1280x1024
(se podría arreglar eso con otra con otra variable o bien algun comando que filtre la linea de error que sale)Vaya, vaya..... Es una desagradable sorpresa saber que mi propuesta de buscarlo por '*+' es excepcional, lo normal es buscarlo por '*'. Ese error que te aparece es eso: un error particular que deberías buscarlo por Internet.

Dicho de otra manera el comando correcto es:


xrandr | grep '*' | cut -c 4-12
Existe otra alternativa usando el comando xdpyinfo:
xdpyinfo | grep dimensions | cut -d ':' -f 2 | cut -c 5-13
Saludos. :adios:

PD: Creo que Perl tiene un comando para obtener la resolución de la pantalla, miralo.

jcsl
05-sep-2011, 18:03
Hola.

He encontrado que se puede obtener la resolución sin usar comandos externos:

my $ventana_main=MainWindow->new();
my $ancho = $ventana_main->screenwidth;
my $alto = $ventana_main->screenheight;

El script modificado quedaría así:

#!/usr/bin/perl

use warnings;
use strict;
use Tk;

#Creado Por DarkSpark

my $ventana_main=MainWindow->new();
$ventana_main->resizable('FALSE','FALSE');

my $ancho = $ventana_main->screenwidth;
my $alto = $ventana_main->screenheight;

my $title=$ventana_main->title('Grabar escritorio');
my $texto=$ventana_main->Label(-text=>"Ingresa el nombre del archivo donde se guardara el video")->grid(-column=>0 , -row=>0);
my $n_archivo = $ventana_main->Entry(-width => 20)->grid(-column=>1 , -row=>0);
my $boton_start=$ventana_main->Button(-justify=>'center',-text=>'Start',-command=>\&start)->grid(-column=>0,-row=>1);
my $boton_stop=$ventana_main->Button(-justify=>'center',-text=>'Stop',-command=>\&stop)->grid(-column=>1,-row=>1);

MainLoop();

sub start
{
my $archivo=$n_archivo->get();
my $ls= `ls ~`;
if ($ls=~/$archivo/)
{
my $dialog = $ventana_main->Dialog(-title => "Error",-buttons => ["Aceptar"],-text=>"el archivo ya existe\ncambie el nombre del archivo");
my $item = $dialog->Show();
}
else
{
system ("ffmpeg -async 1 -f oss -i /dev/dsp -f x11grab -s ".$ancho."x".$alto." -r 24 -i :0.0 -sameq ~/$archivo.mpg &");
}
}

sub stop
{
system("killall ffmpeg");
}

En rojo he remarcado lo que creo (porque no tengo ni idea de Perl) que es un error (redefinir la variable $boton_start). En negrita están los cambios.

Un saludo.

DiabloRojo
05-sep-2011, 18:29
Co..:footinmou jcsl. :aplausos::aplausos:

Ya me imaginaba que había algún comando para obtener esos datos pero como no tengo ni idea de Perl.

Saludos.

Defton
05-sep-2011, 20:16
que bien, aunque ya adapte el código con el comando de xrandr, creo que se sera mejor con la manera nativa.

En rojo he remarcado lo que creo (porque no tengo ni idea de Perl) que es un error (redefinir la variable $boton_start). En negrita están los cambios.
es tas en lo correcto jcsl fue un error declarar la variable 2 veces cuando lo que quería era definir los dos botones start y stop, de hecho anoche que andaba viendo lo del indicador para cuando esta o no grabando me di cuenta del error.



EDITO: Bueno ya quedo con las mejoras :
resolucion automatica ( gracias a jcsl )
indicador de estado ( grabando o detenido )
la ventana se minimisa al empezar a grabar.



#!/usr/bin/perl
use warnings;
use strict;
use Tk;


my$text="Detenido";
my $ventana_main=MainWindow->new();
$ventana_main->resizable('FALSE','FALSE');
my $ancho = $ventana_main->screenwidth;
my $alto = $ventana_main->screenheight;
my $title=$ventana_main->title('Grabar escritorio');
my $texto=$ventana_main->Label(-text=>"Ingresa el nombre del archivo donde se guardara el video")->grid(-column=>0 , -row=>0);
my $n_archivo = $ventana_main->Entry(-width => 20)->grid(-column=>1 , -row=>0);
my $boton_start=$ventana_main->Button(-justify=>'center',-text=>'Start',-command=>\&start)->grid(-column=>0,-row=>1,-sticky =>'ew');
my $boton_stop=$ventana_main->Button(-justify=>'center',-text=>'Stop',-command=>\&stop)->grid(-column=>1,-row=>1,-sticky =>'ew');
my $estado=$ventana_main->Label(-text=>"Estado: ")->grid(-column=>0 , -row=>2,-sticky =>'w');
my $estado2=$ventana_main->Label(-textvariable=>\$text)->grid(-column=>0,-row=>2);
MainLoop();

sub start{
my $archivo=$n_archivo->get();
my $ls= `ls ~`;
if ($ls=~/$archivo/){
my $dialog = $ventana_main->Dialog(-title => "Error",-buttons => ["Aceptar"],-text=>"el archivo ya existe\ncambie el nombre del archivo");
my $item = $dialog->Show();
}
else{
$text="Grabando";
system("ffmpeg -async 1 -f oss -i /dev/dsp -f x11grab -s ".$ancho."x".$alto." -r 24 -i :0.0 -sameq ~/$archivo.mpg &");
$ventana_main->iconify;
}
}
sub stop{
system("killall ffmpeg");
$text="Detenido";
}

JoeTux
06-sep-2011, 05:49
Vaya, vaya..... Es una desagradable sorpresa saber que mi propuesta de buscarlo por '*+' es excepcional, lo normal es buscarlo por '*'.Lo siento, en realidad pensaba que a ti realmente te arrojaba la cadena "*+" el comando xrandr, en ningún caso mi intención fue molestar, desagradar ni sorprender a nadie.

Ese error que te aparece es eso: un error particular que deberías buscarlo por Internet.Respecto a ese error lo mencioné porque la variable no asume el valor de la resolución, tal ves por el error, pero bueno ahora ya no tiene sentido seguir discutiendo ese tema, ya han posteado la solución.

Saludos

DiabloRojo
06-sep-2011, 13:26
Lo siento, en realidad pensaba que a ti realmente te arrojaba la cadena "*+" el comando xrandr, en ningún caso mi intención fue molestar, desagradar ni sorprender a nadie.Tranquilo chico, ni me has molestado ni nada de lo que pienses, si es que piensas mal :D

Es una forma de decir muy personal, que viene a ser que me he pasado de listo por creer que '*+' era por defecto para todos y no lo era.

:adios:

JoeTux
06-sep-2011, 19:37
Tranquilo chico, ni me has molestado ni nada de lo que pienses, si es que piensas mal :D

Es una forma de decir muy personal, que viene a ser que me he pasado de listo por creer que '*+' era por defecto para todos y no lo era.

:adios:
Ok, lo siento entonces por mal entender.
Saludos :adios:

victorhck
10-sep-2011, 20:29
Muy buen aporte!!!
Lo probaré a ver que tal. Yo con Record my desktop si que me arreglo, lanzado desde Kdenlive...
Saludos...

Jonathan Miguel
24-oct-2011, 21:17
que bien, aunque ya adapte el código con el comando de xrandr, creo que se sera mejor con la manera nativa.

es tas en lo correcto jcsl fue un error declarar la variable 2 veces cuando lo que quería era definir los dos botones start y stop, de hecho anoche que andaba viendo lo del indicador para cuando esta o no grabando me di cuenta del error.



EDITO: Bueno ya quedo con las mejoras :
resolucion automatica ( gracias a jcsl )
indicador de estado ( grabando o detenido )
la ventana se minimisa al empezar a grabar.



#!/usr/bin/perl
use warnings;
use strict;
use Tk;


my$text="Detenido";
my $ventana_main=MainWindow->new();
$ventana_main->resizable('FALSE','FALSE');
my $ancho = $ventana_main->screenwidth;
my $alto = $ventana_main->screenheight;
my $title=$ventana_main->title('Grabar escritorio');
my $texto=$ventana_main->Label(-text=>"Ingresa el nombre del archivo donde se guardara el video")->grid(-column=>0 , -row=>0);
my $n_archivo = $ventana_main->Entry(-width => 20)->grid(-column=>1 , -row=>0);
my $boton_start=$ventana_main->Button(-justify=>'center',-text=>'Start',-command=>\&start)->grid(-column=>0,-row=>1,-sticky =>'ew');
my $boton_stop=$ventana_main->Button(-justify=>'center',-text=>'Stop',-command=>\&stop)->grid(-column=>1,-row=>1,-sticky =>'ew');
my $estado=$ventana_main->Label(-text=>"Estado: ")->grid(-column=>0 , -row=>2,-sticky =>'w');
my $estado2=$ventana_main->Label(-textvariable=>\$text)->grid(-column=>0,-row=>2);
MainLoop();

sub start{
my $archivo=$n_archivo->get();
my $ls= `ls ~`;
if ($ls=~/$archivo/){
my $dialog = $ventana_main->Dialog(-title => "Error",-buttons => ["Aceptar"],-text=>"el archivo ya existe\ncambie el nombre del archivo");
my $item = $dialog->Show();
}
else{
$text="Grabando";
system("ffmpeg -async 1 -f oss -i /dev/dsp -f x11grab -s ".$ancho."x".$alto." -r 24 -i :0.0 -sameq ~/$archivo.mpg &");
$ventana_main->iconify;
}
}
sub stop{
system("killall ffmpeg");
$text="Detenido";
}


:confused: :confused: :confused: se debe guardar con extencion .script? Soy novato, alquien me podria sin molestia explicarme como grabar por comando! :D

Defton
25-oct-2011, 06:57
:confused: :confused: :confused: se debe guardar con extencion .script? Soy novato, alquien me podria sin molestia explicarme como grabar por comando! :D

se guarda con extencion .pl y se ejecuta:


perl nombre_del_script.pl

o bien puedes darle permisos de ejecucion:


chmod +x nombre_del_script.pl

y ejecutarlo con

.
./nombre_del_script.pl

Jonathan Miguel
26-oct-2011, 01:49
que bien, aunque ya adapte el código con el comando de xrandr, creo que se sera mejor con la manera nativa.

es tas en lo correcto jcsl fue un error declarar la variable 2 veces cuando lo que quería era definir los dos botones start y stop, de hecho anoche que andaba viendo lo del indicador para cuando esta o no grabando me di cuenta del error.



EDITO: Bueno ya quedo con las mejoras :
resolucion automatica ( gracias a jcsl )
indicador de estado ( grabando o detenido )
la ventana se minimisa al empezar a grabar.



#!/usr/bin/perl
use warnings;
use strict;
use Tk;


my$text="Detenido";
my $ventana_main=MainWindow->new();
$ventana_main->resizable('FALSE','FALSE');
my $ancho = $ventana_main->screenwidth;
my $alto = $ventana_main->screenheight;
my $title=$ventana_main->title('Grabar escritorio');
my $texto=$ventana_main->Label(-text=>"Ingresa el nombre del archivo donde se guardara el video")->grid(-column=>0 , -row=>0);
my $n_archivo = $ventana_main->Entry(-width => 20)->grid(-column=>1 , -row=>0);
my $boton_start=$ventana_main->Button(-justify=>'center',-text=>'Start',-command=>\&start)->grid(-column=>0,-row=>1,-sticky =>'ew');
my $boton_stop=$ventana_main->Button(-justify=>'center',-text=>'Stop',-command=>\&stop)->grid(-column=>1,-row=>1,-sticky =>'ew');
my $estado=$ventana_main->Label(-text=>"Estado: ")->grid(-column=>0 , -row=>2,-sticky =>'w');
my $estado2=$ventana_main->Label(-textvariable=>\$text)->grid(-column=>0,-row=>2);
MainLoop();

sub start{
my $archivo=$n_archivo->get();
my $ls= `ls ~`;
if ($ls=~/$archivo/){
my $dialog = $ventana_main->Dialog(-title => "Error",-buttons => ["Aceptar"],-text=>"el archivo ya existe\ncambie el nombre del archivo");
my $item = $dialog->Show();
}
else{
$text="Grabando";
system("ffmpeg -async 1 -f oss -i /dev/dsp -f x11grab -s ".$ancho."x".$alto." -r 24 -i :0.0 -sameq ~/$archivo.mpg &");
$ventana_main->iconify;
}
}
sub stop{
system("killall ffmpeg");
$text="Detenido";
}


como corrige eso /dev/dsp: Input/output error :confused: cuando le pongo grabar!

Defton
26-oct-2011, 07:24
pueden ser varias cosas.y depende de "quien" es el encargado del audio. yo empezaría por ver si /dev/dsp ( el micrófono ) se encuentra disponible.


ls /dev | grep dsp

si no se encuentra tendrías que cargar los módulos snd_pcm_oss y snd_mixer_oss


su
contraseña
modprobe snd_mixer_oss
modprobe snd_pcm_oss

con esto debería aparecer /dev/dsp

si quieres utilizar alsa en lugar de oss debes averiguar cual es el dispositivo del microfono, en mi caso es plughw:0,0 y deberías cambiar el comando


system("ffmpeg -async 1 -f oss -i /dev/dsp -f x11grab -s ".$ancho."x".$alto." -r 24 -i :0.0 -sameq ~/$archivo.mpg &");


por

system("ffmpeg -async 1 -f alsa -i plughw:0,0 -f x11grab -s ".$ancho."x".$alto." -r 24 -i :0.0 -sameq ~/$archivo.mpg &");


si utilizas pulseaudio, no sabria decirte como configurarlo.

caligulaelsanto
16-nov-2011, 13:13
disculpen mi ignorancia

pero abri un texto, le puse de nombre perl cap.pl le di los permisos
y no pasa nada,

si me pudieran ayudar se los agredeceria

el archivo con el script lo puse en la carpeta escritorio

victorhck
16-nov-2011, 13:20
Y en la consola que error te marca?

caligulaelsanto
16-nov-2011, 13:37
me pone esto,

sergio@linux-8qro:~/Escritorio> ./perl cap.pl
bash: ./perl: No existe el fichero o el directorio
sergio@linux-8qro:~/Escritorio> perl cap.pl
Can't open perl script "cap.pl": No existe el fichero o el directorio
sergio@linux-8qro:~/Escritorio>






segun yo, copie el script, en un texto, lo hice ejecutable lo guarde perl cap.pl

jcsl
16-nov-2011, 13:38
Hola.

La orden es perl ./cap.pl

Un saludo.

caligulaelsanto
16-nov-2011, 13:43
gracias por la pronta respuesta



sergio@linux-8qro:~/Escritorio> perl ./cap.pl
Can't locate Tk.pm in @INC (@INC contains: /usr/lib/perl5/site_perl/5.12.3/i586-linux-thread-multi /usr/lib/perl5/site_perl/5.12.3 /usr/lib/perl5/vendor_perl/5.12.3/i586-linux-thread-multi /usr/lib/perl5/vendor_perl/5.12.3 /usr/lib/perl5/5.12.3/i586-linux-thread-multi /usr/lib/perl5/5.12.3 .) at ./cap.pl line 5.
BEGIN failed--compilation aborted at ./cap.pl line 5.
sergio@linux-8qro:~/Escritorio>

me arroja esto

jcsl
16-nov-2011, 13:47
Hola.

Pues creo que debes instalar el paquete perl-Tk (creo que se llama así). Luego, si tienes más fallos del estilo, puede que tengas que instalar el perl-X correspondiente.

Un saludo.

victorhck
16-nov-2011, 13:55
Sssiiiip!
En el primer post Deftone escribió:

Dependencias:
Perl/tk
ffmpeg

caligulaelsanto
16-nov-2011, 14:00
Hola.

Pues creo que debes instalar el paquete perl-Tk (creo que se llama así). Luego, si tienes más fallos del estilo, puede que tengas que instalar el perl-X correspondiente.

Un saludo.

gracias vere eso y les comento, de verdad les agradezco
xvid no me anda, se para solo y pasar el maldito ogv a avi, me sale fallado


editado: gracias funciona perfecto y con audio y todo ,con el formato ideal para subirlo,por ahí si desean, ver el estado de grabación (tiempo) estaría super completo

caligulaelsanto
10-dic-2011, 08:27
pueden ser varias cosas.y depende de "quien" es el encargado del audio. yo empezaría por ver si /dev/dsp ( el micrófono ) se encuentra disponible.


ls /dev | grep dsp

si no se encuentra tendrías que cargar los módulos snd_pcm_oss y snd_mixer_oss


su
contraseña
modprobe snd_mixer_oss
modprobe snd_pcm_oss

con esto debería aparecer /dev/dsp

si quieres utilizar alsa en lugar de oss debes averiguar cual es el dispositivo del microfono, en mi caso es plughw:0,0 y deberías cambiar el comando


system("ffmpeg -async 1 -f oss -i /dev/dsp -f x11grab -s ".$ancho."x".$alto." -r 24 -i :0.0 -sameq ~/$archivo.mpg &");


por

system("ffmpeg -async 1 -f alsa -i plughw:0,0 -f x11grab -s ".$ancho."x".$alto." -r 24 -i :0.0 -sameq ~/$archivo.mpg &");


si utilizas pulseaudio, no sabria decirte como configurarlo.

perdon que abra nuevo mensaje, pero ocurre que en suse 12.1 se presento este problema

y es que si hago


su
contraseña
modprobe snd_mixer_oss
modprobe snd_pcm_oss

el programa funciona correcto, pero con el reinicio se va y debo ejecutar ambos comandos

la pregunta concreta es :

como podría hacer para que quede permanente ? o bien un script que con un clic me cargara estos dos comandos

muchas gracias

jcsl
10-dic-2011, 11:10
Hola.

Creo que los puedes añadir en /etc/sysconfig/kernel, en la línea que empieza por INITRD_MODULES. Después deberías ejecutar /sbin/mkinitrd. Si lo haces desde YaST -> Editor para los archivos /etc/sysconfig, y ahí en System -> Kernel creo que se ejecuta mkinitrd solo. Otra alternativa, por si eso no funciona, es editar el archivo /etc/init.d/boot.local y añadir los modprobe X ahí. Como se procesa durante el arranque no necesita privilegios de root, ya los tiene. Y también creo que se pueden añadir a GRUB, pero no recuerdo como, XD. Bueno, comenta si funciona o no.

Un saludo.

DiabloRojo
10-dic-2011, 12:17
Normalmente después de un modprobe viene un depmod y ya no es necesario meterlo en los scripts de arranque, pero a veces falla.

caligulaelsanto
10-dic-2011, 17:03
Hola.

Creo que los puedes añadir en /etc/sysconfig/kernel, en la línea que empieza por INITRD_MODULES. Después deberías ejecutar /sbin/mkinitrd. Si lo haces desde YaST -> Editor para los archivos /etc/sysconfig, y ahí en System -> Kernel creo que se ejecuta mkinitrd solo. Otra alternativa, por si eso no funciona, es editar el archivo /etc/init.d/boot.local y añadir los modprobe X ahí. Como se procesa durante el arranque no necesita privilegios de root, ya los tiene. Y también creo que se pueden añadir a GRUB, pero no recuerdo como, XD. Bueno, comenta si funciona o no.

Un saludo.
probé pero no funciona, la verdad no me sale


en cuanto a lo que decía diablo sobre depmod me arroja este error


linux-ps98:/home/sergio # modprobe snd_mixer_oss depmod
FATAL: Error inserting snd_mixer_oss (/lib/modules/3.1.0-1.2-desktop/kernel/sound/core/oss/snd-mixer-oss.ko): Unknown symbol in module, or unknown parameter (see dmesg)
linux-ps98:/home/sergio # modprobe snd_pcm_oss depmod
FATAL: Error inserting snd_pcm_oss (/lib/modules/3.1.0-1.2-desktop/kernel/sound/core/oss/snd-pcm-oss.ko): Unknown symbol in module, or unknown parameter (see dmesg)


gracias por su atención

Defton
11-dic-2011, 00:12
si quieres utilizar alsa en lugar de oss debes averiguar cual es el dispositivo del microfono, en mi caso es plughw:0,0 y deberías cambiar el comando


system("ffmpeg -async 1 -f oss -i /dev/dsp -f x11grab -s ".$ancho."x".$alto." -r 24 -i :0.0 -sameq ~/$archivo.mpg &");


por

system("ffmpeg -async 1 -f alsa -i plughw:0,0 -f x11grab -s ".$ancho."x".$alto." -r 24 -i :0.0 -sameq ~/$archivo.mpg &");

con ese cambio el script funcionaria con alsa sin necesidad de cargar los módulos de oss y así funcionaria bien siempre. saludos

caligulaelsanto
11-dic-2011, 00:31
con ese cambio el script funcionaria con alsa sin necesidad de cargar los módulos de oss y así funcionaria bien siempre. saludos

de hecho hice ese cambio en el script y me sale el audio entrecortado y no pude solucionarlo
en la 14.4 tal cual estaba el script funciona original se ve que la 12 cambio eso

lo que me lleva a preguntar como lo averiguo y como trasladar ese dato al script


gracias por tu atención,

de momento la única manera de hacer los videos con audio correcto es

haciendo los modprobe

DiabloRojo
11-dic-2011, 17:47
en cuanto a lo que decía diablo sobre depmod me arroja este errorNormal, porque el depmod NO es una opción del comando modprobe sino un comando aparte que se ejecuta DESPUES del modprobe

¿Lo has entendido? :scratchch

caligulaelsanto
11-dic-2011, 18:37
Normal, porque el depmod NO es una opción del comando modprobe sino un comando aparte que se ejecuta DESPUES del modprobe

¿Lo has entendido? :scratchch

pues si diablo gracias, es que después de 2 cervezas el mundo de los comandos me es incierto :borracho:

bueno lo hice y de todos modos al reiniciar no los carga

pero bueno al menos cargándolos manualmente, funciona, solo quería automatizarlo,

DiabloRojo
11-dic-2011, 18:45
/etc/init.d/boot.local

caligulaelsanto
11-dic-2011, 20:45
/etc/init.d/boot.local

tal cuál

solucionado muchas gracias diablo

conclusión

agregando los dos comandos
modprobe snd_mixer_oss
modprobe snd_pcm_oss en /etc/init.d/boot.local ya quedo

saludos

jcsl
11-dic-2011, 21:53
Hola.


Otra alternativa, por si eso no funciona, es editar el archivo /etc/init.d/boot.local y añadir los modprobe X ahí.


pues si diablo gracias, es que después de 2 cervezas el mundo de los comandos me es incierto


conclusión

agregando los dos comandos
modprobe snd_mixer_oss
modprobe snd_pcm_oss en /etc/init.d/boot.local ya quedo


Confiesa, cuando leíste el mensaje mío que cito también te habías tomado un par de cervezas, XD. Es broma, es broma. Me alegro de que pudieras solucionarlo al fin.

Un saludo.

caligulaelsanto
11-dic-2011, 22:05
Hola.







Confiesa, cuando leíste el mensaje mío que cito también te habías tomado un par de cervezas, XD. Es broma, es broma. Me alegro de que pudieras solucionarlo al fin.

Un saludo.

jajaja si tenes razón ,caigo en la cuenta que había colocado mal dentro del archivo el texto y de ahí que no los tomara :afirmar: perdón y gracias :aplausos:

soyasi
12-dic-2011, 00:53
Probado el script, funciona muy bien :aplausos:, el único inconveniente para mi es que 29 segundos de grabación son 17,4 MiB.

De todas formas, sigue siendo muy bueno :D

caligulaelsanto
12-dic-2011, 00:57
Probado el script, funciona muy bien :aplausos:, el único inconveniente para mi es que 29 segundos de grabación son 17,4 MiB.

De todas formas, sigue siendo muy bueno :D

es verdad, yo para eso uso handbrake >> http://handbrake.fr/downloads.php

descarga el rpm para fedora ,que funciona perfecto y abres el archivo grabado con el, le das start y listo te lo convierte

soyasi
12-dic-2011, 02:27
es verdad, yo para eso uso handbrake >> http://handbrake.fr/downloads.php

descarga el rpm para fedora ,que funciona perfecto y abres el archivo grabado con el, le das start y listo te lo convierte

No hace falta bajar el de fedora, yo lo tengo en packman (http://packman.links2linux.de) y de 17,4 MiB me lo ha dejado en 2,4 MIB, eso ya es otra cosa :aplausos:

caligulaelsanto
12-dic-2011, 02:31
No hace falta bajar el de fedora, yo lo tengo en packman (http://packman.links2linux.de) y de 17,4 MiB me lo ha dejado en 2,4 MIB, eso ya es otra cosa :aplausos:

a perfecto, fijate que no me salio en el listado, jajaja, bueno joya,
saludos

gasl
12-dic-2011, 06:39
Yo para cambiar formato de video, aunque sólo a ogv o web3 uso firefogg.com
Así no instalo nada en el ordenador.

Salud

caligulaelsanto
12-dic-2011, 11:45
Yo para cambiar formato de video, aunque sólo a ogv o web3 uso firefogg.com
Así no instalo nada en el ordenador.

Salud
te referis a esto? http://nomaspatanes.com/component/content/article/45-video/169-compresor-de-video-online-ogv
parece que no anda ,

ocurre que el formato ogv , no se porque pero no hubo nada que me lo convierta dignamente a nada
es un formato que no sirve para, para colgar en los sitios habituales ej: vimeo y probe cuanto probe cuanto programa pude
XVIDCAP que es una joyita desde hace dos versiones de suse se peta y no va a los pocos segundos
el programa de defton si tuviera pausa sería perfecto ,no haría falta mas nada haces el video conviertes sin necesidad de consola que es una pega
de todos modos con tiempo probare si puedo convertir ogv, mas adelante tal vez era la 11.4 que por alguna razon tenia mal algo , no lo se, pero batalle días con eso y la única solución viable fue este buen programita de defton

gasl
13-dic-2011, 05:29
Pues en realidad me refiero a esto:
http://firefogg.org/make/

Tienen la opción ogv y también webm para internet.
Hay un complemento para firefx firefogg, para tenerlo incorporado al navegador.

Salud

PD: con webm, se pueden subir los videos a vimeo, por ejemplo, sin problemas.

caligulaelsanto
13-dic-2011, 17:43
Pues en realidad me refiero a esto:
http://firefogg.org/make/

Tienen la opción ogv y también webm para internet.
Hay un complemento para firefx firefogg, para tenerlo incorporado al navegador.

Salud

PD: con webm, se pueden subir los videos a vimeo, por ejemplo, sin problemas.


esta bueno, acabo de probar y no va en vimeo, subió el video pero no lo decodifica, lastima
por ahí algún día esos sitios acepten ogv, pero por ahora se ve que no

lo subi como .webm,

saludos

Defton
31-dic-2011, 02:55
Bueno pues aca les dejo unas mejoras para el script

1.-Posibilidad de seleccionar entre Alsa y OSS
2.- Boton de pausa añadido

http://i-host.oversec.org/?di=913252964933


#!/usr/bin/perl
use warnings;
use strict;
use Tk;
my $audio=1;
my $audio_grab;
my $numero=0;
my $boton="Grabar";
my $text="Detenido";
my $ventana_main=MainWindow->new();
$ventana_main->resizable('FALSE','FALSE');
my $ancho = $ventana_main->screenwidth;
my $alto = $ventana_main->screenheight;
my $title=$ventana_main->title('Grabar escritorio');
my $texto=$ventana_main->Label(-text=>"Ingresa el nombre del archivo donde se guardara el video")->grid(-column=>0 , -row=>0);
my $n_archivo = $ventana_main->Entry(-width => 20)->grid(-column=>1 , -row=>0);
my $boton_start=$ventana_main->Button(-justify=>'center',-textvariable=>\$boton,-command=>\&start)->grid(-column=>0,-row=>1,-sticky =>'ew');
my $boton_pause=$ventana_main->Button(-justify=>'center',-text=>'Pausa',-command=>\&pausa)->grid(-column=>1,-row=>1,-sticky=>'ew');
my $boton_stop=$ventana_main->Button(-justify=>'center',-text=>'Stop',-command=>\&stop)->grid(-column=>2,-row=>1,-sticky =>'ew');
my $estado=$ventana_main->Label(-text=>"Estado: ")->grid(-column=>0,-row=>2,-sticky =>'w');
my $estado2=$ventana_main->Label(-textvariable=>\$text)->grid(-column=>0,-row=>2),-sticky =>'ew';
$ventana_main->Label(-text=>'Audio: ')->grid(-column=>0,-row=>3,-sticky =>'w');
$ventana_main->Radiobutton(-text => 'Alsa',-variable=>\$audio,-value=>1)->grid(-column=>0,-row=>3);
$ventana_main->Radiobutton(-text => 'OSS',,-variable=>\$audio,-value=>2)->grid(-column=>1,-row=>3);

MainLoop();

sub start{
my $archivo=$n_archivo->get();
my $ls= `ls ~`;
if ($ls=~/$archivo.mpg/){
my $dialog = $ventana_main->Dialog(-title => "Error",-buttons => ["Aceptar"],-text=>"el archivo ya existe\ncambie el nombre del archivo");
my $item = $dialog->Show();
}
else{
$text="Grabando";
$boton="Grabando";
if ($audio == 1 ){
$audio_grab="alsa -i plughw:0,0";
}
elsif($audio == 2){$audio_grab="oss -i /dev/dsp";}
system("ffmpeg -async 1 -f $audio_grab -f x11grab -s ".$ancho."x".$alto." -r 24 -i :0.0 -sameq ~/$archivo.mpg &");
$ventana_main->iconify;
}
}
sub pausa{

system("killall ffmpeg");
my $archivo=$n_archivo->get();
system ("cd ~ ; mv $archivo.mpg temp.$numero");
$numero++;
$boton="Continuar";
$text="Pausado";
}
sub stop{
system("killall ffmpeg");
my $archivo=$n_archivo->get();
system ("cd ~ ; mv $archivo.mpg temp.$numero");
$numero++;
system("cd ~ ; cat temp.* > $archivo.mpg ; rm temp.*");
$text="Detenido";
$boton="Grabar";
}

caligulaelsanto
31-dic-2011, 03:39
gracias recién lo pruebo y esta perfecto, agradezco tu dedicación

fonfonete
24-oct-2012, 22:18
Muchas gracias, con toda la información del tema no tuve problemas para echarlo a andar.