javoaxian cambió a: javoaxian.me
Este blog se mantendrá como histórico del nuevo javoaxian.me. Por tal motivo, sólo serán creados post que harán referencia a los del nuevo blog. Si hay dudas y comentarios, favor de hacerlos en javoaxian.me.

domingo, 9 de marzo de 2008

Grabar programas de TV en GNU/Linux

Actualización 2008-03-28:
Funciona en Debian configurando el comando sudo como aquí se menciona o ejecutando todo lo referente a sudo como root. También debes tener configurado el repositorio de archivos de multimedia para Debian.


Dada la variedad de tarjetas para sintonizar programas de TV, no será posible describir una instalación estandar para configurar dichas tarjetas y, por consiguiente, este artículo no describirá la configuración de una tarjeta sintonizadora de TV.

Si cuentan con una tarjeta de TV MSI TV VOX 8609 Video USB 2.0 pueden ver como configurarla en este artículo.

Si ya cuentan con su tarjeta de TV configurada en GNU/Linux, instalaremos los programas que vamos a usar para grabar los programas de TV que deseemos.

En este caso vamos a instalar los programas en Ubuntu, para lo cual vamos a usar los paquetes que se encuentran en los repositorios e instalar los paquetes mplayer, mencoder y audacity (este último lo instalo para configurar el audio para la tarjeta de TV mencionada arriba, además que es un excelente software para editar archivos de audio). Recomiendo instalar los gstreamer's, codec's y paquetes mencionados en los siguientes artículos antes de seguir con la instalación.
Activar la opción de extraer audio a formato MP3 en Sound Juicer de Ubuntu 7.10
Reproducir DVD's con Ubuntu 7.10 (Gutsy Gibbon)
Instalar codec's w32codecs para Ubuntu

Ahora instalaremos los paquetes.

$ sudo apt-get install mplayer mencoder audacity

Confirmaremos la instalación presionando "S" y "Enter" cuando se nos solicite.

Si no se tiene conectada la tarjeta de TV, será necesario conectarla para realizar una prueba de grabación.

En el caso de la tarjeta MSI VOX la forma de grabar el audio será conectando con un cable la televisión desde su salida de audiofonos y conectarla a la entrada del micrófono de la computadora.

Ahora deberán abrir el control de volumen, que es una opción si le dan con botón derecho a la bocina del panel principal de Ubuntu. Ahora deberán darle en Archivo -> Cambiar dispositivo y ver el dispositivo que tiene seleccionado, éste nos será de utilidad en audacity para asignar el mismo dispositivo. Ahora deberán abrir audacity e ir a Editar -> Preferencias -> Audio E/S y en la sección Reproducción en la opción Dispositivo elegiremos el dispositivo que vimos en el control de volumen y lo mismo deberemos hacer para la sección Grabando, presionaremos "Aceptar", deberemos seleccionar la opción Line, está opción aparece en la barra de herramienta en una lista desplegable donde también aparece la opción Mic y en algunos dispositivos pueden aparecer Capture y Digital (todas estas opciones puede estar seguidas de un número 0). Ahora presionaremos el botón con círculo rojo para grabar el audio que viene de la televisión. Deberemos ver como va haciendo la grabación y va cambiando la linea de la pista y podremos presionar el botón con el cuadro amarillo para detener la grabación, y si queremos escuchar lo que se grabó, deberemos presionar el botón con la flecha verde.

Si se complica mucho usar audacity, como otra alternativa, pueden usar la aplicación Grabador de sonido que se encuentra en Aplicaciones -> Sonido y vídeo -> Grabador de sonido y jugar con la opción "Grabar de la entrada" y presionando el botón "Grabar" hasta que nos grabe el audio. Con este programa fue con el que pude ajustar la grabación del audio para Debian.

Si todo ésto funcionó correctamente, ya podrá grabarse el video junto con el audio.

Ya que se encuentra todo listo, ejecutaremos el siguiente comando.

mencoder tv://3 -tv driver=v4l2:input=2:norm=NTSC:width=720:height=480:amode=1:device=/dev/video0 -ovc lavc -lavcopts vcodec=mpeg4:autoaspect=1:vrc_buf_size=1024:vrc_maxrate=9799:vbitrate=4000 -oac lavc -lavcopts acodec=mp2:abitrate=64 -rawaudio channels=2 -vf scale=720:480,pp=hb/vb/dr/al/lb -srate 48000 -o video.avi -af lavcresample=48000 -ofps 30

Iniciará la grabación, veremos como nos aparecen mensajes como éstos:

MEncoder 2:1.0~rc1-0ubuntu13.1 (C) 2000-2006 MPlayer Team
CPU: Genuine Intel(R) CPU T2400 @ 1.83GHz (Family: 6, Model: 14, Stepping: 8)
CPUflags: Type: 6 MMX: 1 MMX2: 1 3DNow: 0 3DNow2: 0 SSE: 1 SSE2: 1
Compiled with runtime CPU detection.
success: format: 9 data: 0x0 - 0x0
TV file format detected.
Selected driver: v4l2
name: Video 4 Linux 2 input
author: Martin Olschewski
comment: first try, more to come ;-)
Selected device: MSI VOX USB 2.0
Tuner cap:
Tuner rxs:
Capabilites: video capture tuner audio read/write streaming
supported norms: 0 = PAL-BG; 1 = PAL-DK; 2 = PAL-I; 3 = PAL-M; 4 = NTSC;
inputs: 0 = Television; 1 = Composite1; 2 = S-Video;
Current input: 2
Current format: YUYV
v4l2: current audio mode is : STEREO
Audio block size too low, setting to 16384!
v4l2: ioctl query control failed: Invalid argument
[V] filefmt:9 fourcc:0x32595559 size:720x480 fps:29.97 ftime:=0.0334
==========================================================================
Opening audio decoder: [pcm] Uncompressed PCM audio decoder
AUDIO: 44100 Hz, 2 ch, s16le, 1411.2 kbit/100.00% (ratio: 176400->176400)
Selected audio codec: [pcm] afm: pcm (Uncompressed PCM)
==========================================================================
Opening video filter: [expand osd=1]
Expand: -1 x -1, -1 ; -1, osd: 1, aspect: 0.000000, round: 1
Opening video filter: [pp=hb/vb/dr/al/lb]
Opening video filter: [scale w=720 h=480]
==========================================================================
Opening video decoder: [raw] RAW Uncompressed Video
VDec: vo config request - 720 x 480 (preferred colorspace: Packed YUY2)
[PP] Using external postprocessing filter, max q = 6.
VDec: using Packed YUY2 as output csp (no 0)
Movie-Aspect is undefined - no prescaling applied.
SwScaler: reducing / aligning filtersize 1 -> 4
SwScaler: reducing / aligning filtersize 1 -> 4
SwScaler: reducing / aligning filtersize 1 -> 1
SwScaler: reducing / aligning filtersize 9 -> 8

SwScaler: BICUBIC scaler, from yuyv422 to yuv420p using MMX2
SwScaler: using 4-tap MMX scaler for horizontal luminance scaling
SwScaler: using 4-tap MMX scaler for horizontal chrominance scaling
SwScaler: using 1-tap MMX "scaler" for vertical scaling (YV12 like)
SwScaler: 720x480 -> 720x480
videocodec: libavcodec (720x480 fourcc=34504d46 [FMP4])
Selected video codec: [rawyuy2] vfm: raw (RAW YUY2)
==========================================================================
Forcing audio preload to 0, max pts correction to 0.
Writing header...1f ( 0%) 0.00fps Trem: 0min 0mb A-V:0.000 [0:0]
ODML: vprp aspect is 16384:10922.
Writing header...
ODML: vprp aspect is 16384:10922.

1 duplicate frame(s)!
Pos: 0.1s 3f ( 0%) 0.00fps Trem: 0min 0mb A-V:0.000 [0:0]
1 duplicate frame(s)!
Pos: 0.2s 5f ( 0%) 0.00fps Trem: 0min 0mb A-V:0.000 [0:0]
1 duplicate frame(s)!
Pos: 0.3s 6f ( 0%) 0.00fps Trem: 0min 0mb A-V:0.000 [0:0]
1 duplicate frame(s)!
Pos: 0.4s 8f ( 0%) 0.00fps Trem: 0min 0mb A-V:0.000 [0:0]
1 duplicate frame(s)!

Para detener la grabación presionaremos las teclas Ctrl+C.

Ahora explicaré algunas opciones del comando anterior.
  • tv://3: le decimos que va a sintonizar el canal 3.
  • driver: el driver que usaremos dummy, v4l, v4l2, bsdbt848.
  • input: tipo de entrada tv (0), composite1(1) o S-Video(2) (yo uso la grabación por medio de una conexión de supervideo).
  • norm: en mi caso uso la norma NTSC que es la que se usa en méxico y en europa se usa más la PAL.
  • width: pixeles de largo (en el caso de aquí se usan 720, pero pueden ajustarse al tamaño que queramos el video).
  • height: pixeles de ancho (en el caso de aquí se usan 480, pero pueden ajustarse al tamaño que queramos el video).
  • amode: tipo de audio (1) que equivale a stereo.
  • device: dispositivo de la tarjeta de video, por default es el /dev/video0.
  • vcodec: codec de video a usar.
  • acode: codec de audio a usar (mp2, mp3, ac3, adpcm_ima_wav, sonic).
  • scale: tamaño de alto y ancho, igual a width y height juntos separados por : ejemplo 720:480.
  • -o archivo.avi: se indica después de la -o el nombre de archivo donde se grabará o la ruta con el nombre del archivo, por ejemplo: /tmp/archivo.avi.

Estas son algunas opciones, si deseas saber el significado completo de todas las opciones, puedes ejecutar el comando man mencoder y allí viene todo.

Con este comando seremos capaces de grabar videos desde la TV a nuestra computadora. Deberán ajustar los parametros según a lo que ustedes usen, también pueden crear un archivo de configuración mencoder.conf para poner las opciones de grabación y no tener que escribir todo siempre que queramos grabar. Este es un ejemplo del archivo.

# Make MEncoder output to a default filename.
o=encoded.avi
# The next 4 lines allow mencoder tv:// to start capturing immediately.
oac=pcm=yes
ovc=lavc=yes
lavcopts=vcodec=mjpeg
tv=driver=v4l2:input=1:width=768:height=576:device=/dev/video0:audiorate=48000
# more complex default encoding option set
lavcopts=vcodec=mpeg4:autoaspect=1
lameopts=aq=2:vbr=4
ovc=lavc=1
oac=lavc=1
passlogfile=pass1stats.log
noautoexpand=1
subfont-autoscale=3
subfont-osd-scale=6
subfont-text-scale=4
subalign=2
subpos=96
spuaa=20

Este es el ejemplo de mi archivo mencoder.conf en Ubuntu, el cual debe de ser colocado en ~/.mplayer/

tv=driver=v4l2:input=3:norm=NTSC:width=720:height=480:amode=1:device=/dev/video0
ovc=lavc=1
lavcopts=vcodec=mpeg4:autoaspect=1:vrc_buf_size=1024:vrc_maxrate=9799:vbitrate=4000
oac=lavc=1
lavcopts=acodec=mp2:abitrate=64
rawaudio=channels=2
vf=scale=720:480,pp=hb/vb/dr/al/lb
srate=48000
af=lavcresample=48000
ofps=30

Y ejecuto el comando de la siguiente manera.

mencoder tv://3 -o archivo.avi

Espero y les sea de utilidad.

1 comentario:

Alexander Ochoa dijo...

Saludos le cuentoque no tuve exito con el post pero creo que se trata de una mala configurqación aquí le dejo el resultado: MEncoder 2:1.0~rc2-0ubuntu17 (C) 2000-2007 MPlayer Team CPU: Intel(R) Celeron(R) CPU 2.93GHz Family: 15, Model: 4, Stepping: 9) CPUflags: Type: 15 MMX: 1 MMX2: 1 3DNow: 0 DNow2: 0 SSE: 1 SSE2: 1 Compiled with runtime CPU detection. success: format: 9 data: 0x0 - 0x0 TV file format detected.
Selected driver: v4l2 name: Video 4 Linux 2 input author: Martin Olschewski
comment: first try, more to come ;-)
Selected device: Kworld/Tevion V-Stream Xpert TV Tuner cap: STEREO LANG1 LANG2 Tuner rxs: MONO Capabilites: video capture video overlay VBI capture device tuner read/write streaming supported norms: 0 = NTSC; 1 = NTSC-M; = NTSC-M-JP; 3 = NTSC-M-KR; 4 = PAL; 5 PAL-BG; 6 = PAL-H; 7 = PAL-I; 8 = PAL-DK; 9 = PAL-M; 10 = PAL-N; 11 = PAL-Nc; 12 = PAL-60; 13 = SECAM; 14 = SECAM-B; 15 = SECAM-G; 16 = SECAM-H; 17 SECAM-DK; 18 = SECAM-L; 19 = SECAM-Lc; inputs: 0 = Television; 1 = Composite1; 2 = S-Video; Current input: 0 Current format: BGR24 v4l2: current audio mode is : STEREO Unable to open '/dev/dsp': Device or resource busy Unable to open '/dev/dsp': Device or resource busy Unable to open '/dev/dsp': Device or resource busy v4l2: 0 frames successfully processed, 0 frames dropped.Fallo de segmentación