viernes, 26 de junio de 2020

Ver cámara web en ventana sin bordes (aplicable a Linux, a Windows y posiblemente también a MAC).

     (P) Hugo Napoli, 2020.-     

Es increíble lo difícil que resulta alcanzar un cometido tan sencillo, en apariencia.
Cuando me pongo a pensar en la cantidad de horas invertidas buscando programas que solucionaran este tema (y esto aplica también para Windows), no puedo creer (aún) el hecho de haber encontrado solo 1 programa para Windows y ninguno para Linux (que cumplieran estos criterios):
  • que funcionaran bien desde un inicio,
  • que no necesitaran configuraciones previas complicadas,
  • que una vez ajustadas las opciones necesarias, quedaran aplicadas "para siempre",
  • que fueran gratuitos,
  • que permitieran seleccionar una cámara determinada.
Esto, aunque parezca demasiado pedir, no debería serlo, ya que un programa debe proporcionar un conjunto de herramientas mínimas que sean posibles de configurar respecto al cometido que aborda.

Veamos cómo resolver esta situación, sistema por sistema y paso por paso.


https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCDoBnzHLbAMiQoRJv3XInILnmwf7eZaM1bjMViURrbzsPLwtJ78YKo7KJ9ZG8aQEXvwQmmHC0N0WMTwhH42XwWFjXUTR7x3vdwH2ELtG394wEoMXIIMMvcIsULr4Gww9r_HfaBGVRPRec/s640/Separador+blogger+creado+por+Hugo+Napoli.png


Sobre MAC:

una vez más, MAC es una isla. Quien allí se mete, no solamente está obligado sujeto a pagar altos costos de manera innecesaria y a quedar como rehenes en solitario, sino que tampoco se le permite al usuario "externo a MAC" saber si las soluciones que se aplican a Linux (hermano de MAC OS, aunque no lo parezca), pueden ser aplicables también para MAC.

De modo que: espero que te vaya bien con la solución que encontré para Linux, ya que tu máquina y la mía hablan un idioma en común.


https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCDoBnzHLbAMiQoRJv3XInILnmwf7eZaM1bjMViURrbzsPLwtJ78YKo7KJ9ZG8aQEXvwQmmHC0N0WMTwhH42XwWFjXUTR7x3vdwH2ELtG394wEoMXIIMMvcIsULr4Gww9r_HfaBGVRPRec/s640/Separador+blogger+creado+por+Hugo+Napoli.png

Sobre Linux:

Una sola línea de comandos hace la magia:

mplayer tv:// -tv driver=v4l2:width=640:height=320:device=/dev/video2:fps=30:outfmt=yuy2 -noborder -geometry 0:0 -zoom -x 250 -y 150 -vf mirror -ontop

Explicaré, de todo este complejo ensamblado de órdenes y parámetros, lo que está a mi alcance.
Vamos a descomponer a esta línea de comandos en varias partes.

mplayer tv:// -tv : indica que será utilizado el reproductor mplayer para mostrar la cámara web en lugar de ser utilizado para mostrar una película. Mplayer debe estar instalado en el sistema, lógicamente, para que esta línea tenga sentido.

driver=v4l2 : especifica el uso del controlador v412 (Video for Linux versión 2) para dicha tarea.

width=640:height=320 y fps=30 : ancho, alto y frecuencia de la resolución deseada, en píxeles y hercios, respectivamente. Es conveniente consultar con el manual de referencia de la cámara web, para conocer los valores nativos soportados por esta.

device=/dev/video2 : normalmente, en Linux se utilizan /dev/video0, /dev/video1, y en definitiva, /dev/videoN para identificar las diferentes cámaras web (o modos de las mismas) que estén conectadas al ordenador. En este caso, la cámara integrada en la máquina portátil que estaba utilizando en ese momento, era /dev/video0, pero a mí me interesaba aplicar esta línea de comandos a otra cámara que también estaba ya conectada, cuyo identificador era /dev/video2.

-noborder : ¡la magia! Esta línea quita el tan odioso borde que enmarca la imagen proporcionada por nuestra cámara web cuando queremos emitir o grabar un video en vivo con ventana no maximizada ni puesta a pantalla completa.

-geometry 0:0
 : lugar de la pantalla en donde queremos posicionar nuestra ventana de video. El primer número, representa la posición x, y el segundo, la y.

NOTA: todos los ejemplos siguientes, están basados en una resolución de pantalla de 1360 por 768, y una resolución de cámara de 640 por 320.

Por ejemplo:

  • si queremos que la imagen de la cámara aparezca en el ángulo superior izquierdo, debemos poner los valores 0:0, sin importar la resolución de la pantalla ni la de la cámara web.
  • si queremos que aparezca en el ángulo superior derecho, trabajaremos solamente con el ancho (x) y haremos la siguiente operación.
    1360-640=720. Como la altura en este caso no importa, los valores para geometry, deberán ser 720:0
  • si queremos que se vea en el ángulo inferior izquierdo, debemos trabajar solamente con el alto (y) y hacer la siguiente operación. 768-320=448.
    Como la anchura en este caso no importa, los valores para geometry, deberán ser 0:448
  • si queremos posicionar la imagen en el ánguo inferior derecho, deberemos trabajar con el alto y el ancho, y hacer las siguientes operaciones.
    Para el ancho: 1360-640=720. Para el alto: 768-320=448.
    Entonces, los valores para geometry, deberán ser 720:448
  • Algo más complicado, pero no menos importante: podemos querer que la cámara esté situada justo en el centro. En ese caso, utilizaremos la vieja e infalible táctica de los taquígrafos.
    Ancho: (1360-640)/2=360. Alto: (768-320)/2=224.
    Entonces, los valores para geometry, deberán ser 360:224
-zoom -x 250 -y 150 : es el zoom, y aplica para achicar la imagen como para agrandarla.Independientemente de la resolución, podemos querer ajustar el tamaño de la ventana, como es mi caso. Esto posee relación directa con la resolución de la pantalla. Con valores 0:0, no hay zoom alguno, y el ancho y alto de la imagen de la cámara web, estará determinado por lo indicado en "geometry".
Con "-zoom -x 250 -y 150", le estamos indicando Mplayer que muestre a la imagen de la cámara web en un área de 250 píxeles de ancho por 150 de alto, con lo cual, podemos deducir que si cambiamos los valores a "-zoom -x 1360 -y 768", estaríamos ocupando toda la pantalla con la imagen de la cámara.
Es interesante probar con valores bajos, por ejemplo 40:25. Te llevarás una buena sorpresa.

-vf mirror : espeja horizontalmente la cámara. Yo prefiero utilizar este comando, pero no en todos los casos es necesario. Creo que en la mayoría de ellos, sí.

-ontop : ¿qué utilidad podría tener todo esto, si al querer "tocar" con el ratón cualquier cosa que no sea la ventana de la cámara, la misma se perdiera en el fondo, quedando tapada por una partida de videojuego, presentación con diapositivas, un video de fondo, el escritorio, ventanas abriéndose y cerrándose para mostrar procedimientos o una imagen? Para que la imagen de la cámara esté siempre "adelante del todo" (en primer plano) con total independencia de lo que haya detrás este parámetro es obligatorio.


https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCDoBnzHLbAMiQoRJv3XInILnmwf7eZaM1bjMViURrbzsPLwtJ78YKo7KJ9ZG8aQEXvwQmmHC0N0WMTwhH42XwWFjXUTR7x3vdwH2ELtG394wEoMXIIMMvcIsULr4Gww9r_HfaBGVRPRec/s640/Separador+blogger+creado+por+Hugo+Napoli.png

Sobre Windows:

Amigos, les tengo que pedir algo de paciencia. Era urgente publicar esta información específicamente para Linux, pero decidí hacerla extensiva también para Windows. En breve (muy breve) estaré hablándoles del maravilloso software que encontré para realizar todo esto.


No hay comentarios.:

Publicar un comentario