• Suscríbete al Feed Espacio Linux
  • Suscríbete al Feed por Email
  • Sigue a Espacio Linux en Identi.ca
  • Espacio Linux también en Facebook
  • Sigue a Espacio Linux en Twitter
  • Sigue a Espacio Linux en Google +
          Iniciar sesión | Registrarse

Super tutorial de introducción a GStreamer

En este pequeño repaso vamos a ver algunos ejemplos de cosas simples que podemos hacer desde la consola con GStreamer y a explicar un poco su funcionamiento.

Logo de Gstreamer

Logo de Gstreamer

Introducción a GStreamer

Gstreamer es, hoy por hoy, prácticamente el framework multimedia de facto en GNU/Linux. Con GStreamer podemos por ejemplo:

  • Mezclar diferentes tipos de medios como pueden ser señales de audio, video, imágenes y subtitulos.
  • Permite aplicar diferentes tipos de filtros tanto de audio como de video.
  • Transmisión y recepción de datos en tiempo real.
  • Codificación y decodificación en diferentes formatos.
  • Reproducción de archivos multimedias.
  • Y así un muy largo etcetera de posibilidades.

Un gran numero proyectos muy conocidos hacen uso de GStreamer como por ejemplo: Kaffeine, Totem, Cheese, Kamoso, Pidgin, Empathy, Gnash, Phonon, Transmageddon, Pitivi, y muchas, muchas más. Si te interesa lo que acabas de leer pues entonces comencemos.

Instalación de GStreamer

Primero debemos instalar todos los paquetes necesarios para hacer uso de GStreamer (si es que todavía no lo hemos hecho). Debemos ejecutar (como root) el siguiente comando según nuestra distro:

  • Arch/Chakra/Parabola: pacman -S gstreamer0.10 gstreamer0.10-good gstreamer0.10-bad
  • Debian/Ubuntu/Linux Mint/Trisquel: apt-get install gstreamer0.10-tools gstreamer0.10-plugins-good gstreamer0.10-plugins-bad
  • Fedora/CentOS: yum install gstreamer gstreamer-plugins-good gstreamer-plugins-bad-free
  • OpenSuSE: zypper install gstreamer-0_10-utils gstreamer-0_10-plugins-good gstreamer-0_10-plugins-bad
  • Mandriva/Mageia: urpmi gstreamer0.10-tools gstreamer0.10-plugins-good gstreamer0.10-plugins-bad

Con esto ya estamos listos para comenzar.

Elementos, Pads, Sources y Sinks

GStreamer divide cada unidad básica de procesamiento en lo que se conoce como Elementos.

Elementos de GStreamer

Elementos de GStreamer

A su vez cada elemento puede tener una, varias, o ninguna conexión de entrada o de salida, dichas conexiones se las conoce como pads. A su vez los elementos que solo entregan señal se los conoce como source (Fuentes), y los que solo reciben señal se los conoce como sink (Consumidores).

Pads

Pads

Ahora que ya sabemos esto, vamos a hacer nuestro primer experimento con GStreamer. Para ello utilizaremos el comando gst-launch-0.10 (puede variar el nombre según la distro) de la siguiente manera:

1
gst-launch-0.10 videotestsrc ! ximagesink
Ejemplo de una pipeline

Ejemplo de una pipeline

videotestsrc es un elemento del tipo source que genera una señal de video similar al del inicio y fin de transmisión los canales de TV.

ximagesink es un elemento del tipo sink que renderiza todas las señales de video que le llegan en una ventana.

GStreamer utiliza el operador ! (exclamación) para vincular los elementos, a esa vinculación de elementos se la conoce como pipe (tubería), y a la ruta total formada por la vinculación de todos los elementos se le llama pipeline (red de tuberías).

El resultado de ejecutar dicho comando será este:

El "Hola mundo!" de GStreamer

El “Hola mundo!” de GStreamer

Para consultar la lista completa de elementos que provee GStreamer podemos usar el comando gst-inspect-0.10 (puede variar el nombre según la distro) cuya salida será parecida a esta (suele ser bastante mas larga):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
qtvideosink:  qtvideosink: Qt video sink
qtvideosink:  qtglvideosink: Qt GL video sink
qtvideosink:  qwidgetvideosink: QWidget video sink
bluetooth:  rtpsbcpay: RTP packet payloader
bluetooth:  a2dpsink: Bluetooth A2DP sink
bluetooth:  avdtpsink: Bluetooth AVDTP sink
bluetooth:  sbcparse: Bluetooth SBC parser
bluetooth:  sbcdec: Bluetooth SBC decoder
bluetooth:  sbcenc: Bluetooth SBC encoder
bluetooth: sbc: sbc
bayer:  rgb2bayer: RGB to Bayer converter
bayer:  bayer2rgb: Bayer to RGB decoder for cameras
schro:  schroenc: Dirac Encoder
schro:  schrodec: Dirac Decoder
vp8:  vp8enc: On2 VP8 Encoder
vp8:  vp8dec: On2 VP8 Decoder
festival:  festival: Festival Text-to-Speech synthesizer

El formato de dicha salida es el siguiente:

1
grupo: nombredelelemento: descripcion

Para consultar la información sobre cada elemento usaremos el siguiente comando:

1
gst-inspect-0.10 nombredelelemento

Por ejemplo para el elemento ximagesink, su salida correspondiente será esta:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
Factory Details:
Long name:    Video sink
Class:        Sink/Video
Description:  A standard X based videosink
Author(s):    Julien Moutte <julien@moutte.net>
Rank:         secondary (128)

Plugin Details:
Name:                 ximagesink
Description:          X11 video output element based on standard Xlib calls
Filename:             /usr/lib/gstreamer-0.10/libgstximagesink.so
Version:              0.10.36
License:              LGPL
Source module:        gst-plugins-base
Source release date:  2012-02-20
Binary package:       GStreamer Base Plugins (Archlinux)
Origin URL:           http://www.archlinux.org/

GObject
+----GstObject
    +----GstElement
            +----GstBaseSink
                +----GstVideoSink
                        +----GstXImageSink

Interfaces implementados:
GstImplementsInterface
GstNavigation
GstXOverlay

Pad Templates:
SINK template: 'sink'
    Availability: Always
    Capabilities:
    video/x-raw-rgb
            framerate: [ 0/1, 2147483647/1 ]
                width: [ 1, 2147483647 ]
                height: [ 1, 2147483647 ]


Element Flags:
no flags set

Element Implementation:
Has change_state() function: 0x7fe77f8e5490
Has custom save_thyself() function: gst_element_save_thyself
Has custom restore_thyself() function: gst_element_restore_thyself

Element has no clocking capabilities.
Element has no indexing capabilities.
Element has no URI handling capabilities.

Pads:
SINK: 'sink'
    Implementation:
    Has chainfunc(): gst_base_sink_chain
    Has custom eventfunc(): gst_base_sink_event
    Has custom queryfunc(): gst_base_sink_sink_query
    Has custom iterintlinkfunc(): gst_pad_iterate_internal_links_default
    Has bufferallocfunc(): gst_base_sink_pad_buffer_alloc
    Has getcapsfunc(): gst_base_sink_pad_getcaps
    Has setcapsfunc(): gst_base_sink_pad_setcaps
    Has acceptcapsfunc(): gst_pad_acceptcaps_default
    Has fixatecapsfunc(): gst_base_sink_pad_fixate
    Pad Template: 'sink'

Element Properties:
name                : The name of the object
                        flags: legible, escribible
                        String. Default: "ximagesink0"
preroll-queue-len   : Number of buffers to queue during preroll
                        flags: legible, escribible
                        Unsigned Integer. Range: 0 - 4294967295 Default: 0
sync                : Sync on the clock
                        flags: legible, escribible
                        Boolean. Default: true
max-lateness        : Maximum number of nanoseconds that a buffer can be late before it is dropped (-1 unlimited)
                        flags: legible, escribible
                        Integer64. Range: -1 - 9223372036854775807 Default: 20000000
qos                 : Generate Quality-of-Service events upstream
                        flags: legible, escribible
                        Boolean. Default: true
async               : Go asynchronously to PAUSED
                        flags: legible, escribible
                        Boolean. Default: true
ts-offset           : Timestamp offset in nanoseconds
                        flags: legible, escribible
                        Integer64. Range: -9223372036854775808 - 9223372036854775807 Default: 0
enable-last-buffer  : Enable the last-buffer property
                        flags: legible, escribible
                        Boolean. Default: true
last-buffer         : The last buffer received in the sink
                        flags: legible
                        MiniObject of type "GstBuffer"
blocksize           : Size in bytes to pull per buffer (0 = default)
                        flags: legible, escribible
                        Unsigned Integer. Range: 0 - 4294967295 Default: 4096
render-delay        : Additional render delay of the sink in nanoseconds
                        flags: legible, escribible
                        Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0
throttle-time       : The time to keep between rendered buffers (unused)
                        flags: legible, escribible
                        Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0
show-preroll-frame  : Whether to render video frames during preroll
                        flags: legible, escribible
                        Boolean. Default: true
display             : X Display name
                        flags: legible, escribible
                        String. Default: null
synchronous         : When enabled, runs the X display in synchronous mode. (unrelated to A/V sync, used only for debugging)
                        flags: legible, escribible
                        Boolean. Default: false
pixel-aspect-ratio  : The pixel aspect ratio of the device
                        flags: legible, escribible
                        String. Default: null
force-aspect-ratio  : When enabled, reverse caps negotiation (scaling) will respect original aspect ratio
                        flags: legible, escribible
                        Boolean. Default: false
handle-events       : When enabled, XEvents will be selected and handled
                        flags: legible, escribible
                        Boolean. Default: true
handle-expose       : When enabled, the current frame will always be drawn in response to X Expose events
                        flags: legible, escribible
                        Boolean. Default: true
window-width        : Width of the window
                        flags: legible
                        Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0
window-height       : Height of the window
                        flags: legible
                        Unsigned Integer64. Range: 0 - 18446744073709551615 Default: 0

Dentro de la información devuelta por gst-inspect-0.10 podrán encontrar un campo llamado Source module el cual indica el grupo al que pertenece dicho elemento. GStreamer divide los diferentes elementos de los que hace uso en diferentes categorías:

  • gst-plugins-base: Este grupo contiene todo un conjunto de plugins básicos bien soportados, que permiten, por ejemplo, el acceso a ficheros, acceso al hardware del sistema, acceso HTTP y FTP, etc..
  • gst-plugins-good: Este grupo contiene elementos extras (principalmente codecs y efectos) bien soportados.
  • gst-plugins-bad: Este grupo contiene elementos extras pero que podrían tener algún bug.
  • gst-plugins-ugly: Este grupo contiene elementos que podrían tener problemas de patentes o que podrían no ser Software Libre.

Propiedades y Caps

A su vez podemos personalizar cada elemento mediante sus propiedades, así como también podemos filtrar el tipo de señal que envía o recibe cada elemento mediante el uso de caps (capacidades). Por ejemplo:

1
gst-launch-0.10 videotestsrc pattern='ball' ! video/x-raw-rgb,width=800,height=600,framerate=100/1 ! ximagesink

El formato para las propiedades es básicamente:

1
nombredelelemento prop1=val1 prop2=val2 prop3=val3 ...

Los caps se colocan como otro elemento y cada propiedad va separada por , (coma).

Adaptadores

Los adaptadores son un tipo especial de elementos que permiten conectar dos elementos con capacidades diferentes.

En el siguiente ejemplo capturamos imágenes de la webcam, la cual está en formato YUV y mediante el uso del elemento ffmpegcolorspace la convertimos automáticamente a RGB

1
gst-launch-0.10 v4l2src device=/dev/video0 ! video/x-raw-yuv,width=640,height=480,framerate=30/1 ! ffmpegcolorspace ! ximagesink
Adaptador de señales de video

Adaptador de señales de video

Mientras que para adaptar señales de audio se utiliza el elemento audioconvert. Por ejemplo:

1
gst-launch-0.10 audiotestsrc ! audioconvert ! alsasink
Adaptador de señales de audio

Adaptador de señales de audio

Codecs

Los codecs son elementos que nos permiten entre otras cosas comprimir o descomprimir la información contenida dentro de un archivo de audio, video o imagen. Por ejemplo para mostrar una imagen en formato PNG usamos el comando:

1
gst-launch-0.10 filesrc location=imagen.png ! pngdec ! freeze ! ffmpegcolorspace ! ximagesink
Diagrama del visualizador de imágenes

Diagrama del visualizador de imágenes

filesrc permite abrir cualquier tipo de archivo y entrega toda la información en formato crudo (tal y como esta almacenada).

pngdec es el codec que sirve para descomprimir la información en formato PNG y convertirla a RGB en crudo.

El elemento freeze permite congelar el flujo de datos. Si no estuviera presente, la ventana se cerraría automáticamente sin mostrar la imagen.

En el siguiente ejemplo vamos a ver como hacer una captura de pantalla y guardarla en formato PNG:

1
gst-launch-0.10 ximagesrc ! ffmpegcolorspace ! pngenc ! filesink location=captura.png
Diagrama del capturador de imágenes del escritorio

Diagrama del capturador de imágenes del escritorio

Puede notar que esta vez no es necesario utilizar el elemento freeze pues no es nuestra intención bloquear el flujo de datos, y que también invertimos el flujo de datos cambiando el tipo de cada elemento, lo que antes era src pasa a ser sink y viceversa.

Bifurcaciones, muxers y Queues

Hasta ahora veníamos procesando todas las señales de forma completamente lineal, una atrás de otra. Pero GStreamer ofrece un mecanismo especial con el cual podemos romper con esa linealidad y procesar varias pipes al mismo tiempo, con lo cual podemos crear pipelines mas complejas y dinámicas.

Supongamos que queremos realizar una captura de pantalla y guardarla en dos formatos diferentes al mismo tiempo, por ejemplo en formato PNG y JPG. Para ello podemos utilizar el siguiente comando:

1
2
3
gst-launch-0.10 ximagesrc ! tee name=bifurcacion \
                bifurcacion. ! queue ! ffmpegcolorspace ! pngenc ! filesink location=captura.png \
                bifurcacion. ! queue ! ffmpegcolorspace ! jpegenc ! filesink location=captura.jpg
Diagrama de ejemplo de una bifurcación

Diagrama de ejemplo de una bifurcación

Aquí podemos ver dos nuevos elementos, tee (bifurcación) y queue (cola).

tee es un elemento que posee un único pad de entrada y es capaz de dividir la señal de entrada entre varias señales de salida idénticas a la entrada.

Para hacer uso del elemento tee debemos asignarle un nombre mediante la propiedad name (todos los elementos de GStreamer poseen esta propiedad), para conectar un pipeline al tee basta con usar el nombre asignado al tee, seguido de un . (punto), como si fuera cualquier otro elemento.

Luego de declarar el elemento tee no debemos colocar el operador ! (exclamación), ya que un tee representa el final de un pipeline.

El elemento queue permite destrabar el flujo de datos en caso de tener varias pipes conectadas a un único pad. Si no hubiesemos colocado un queue entonces las pipelines correspondientes a los codecs de PNG y JPG se hubieran bloqueado mutuamente, y por lo tanto GStreamer hubiera quedado bloqueado sin escribir ningun dato en los respectivos archivos.

En contraposición al elemento tee tenemos al elemento muxer (multiplexor o mezclador), el cual posee varios pads de entrada y un único pad de salida, por lo tanto funciona como un mezclador de señales (de tipos iguales o diferentes).

Por ejemplo, para grabar un video en formato WEBM usando la webcam y un micrófono, usaríamos el siguiente comando:

1
2
3
4
gst-launch-0.10 -e v4l2src device=/dev/video0 ! video/x-raw-yuv,width=640,height=480,framerate=30/1 ! \
                   ffmpegcolorspace ! vp8enc quality=10 speed=7 bitrate=1000000000 ! queue ! mezclador. \
                   alsasrc device=plughw:0,0 ! queue ! audioconvert ! queue ! vorbisenc ! queue ! mezclador. \
                   webmmux name=mezclador ! filesink location=webcam.webm
Grabando video con GStreamer

Grabando video con GStreamer

El elemento muxer al igual que el elemento tee necesita un nombre para poder utilizarlo. En este caso el elemento webmmux es un muxer el cual mezcla una señal de video comprimida con el codec vp8enc en formato VP8, y otra señal de audio comprimida con el codec vorbisenc en formato Vorbis.

El elemento alsasrc captura el audio proveniente de microfono por defecto usando ALSA.

A su vez se ha añadido la opción -e a gst-launch-0.10, esta opción permite que cuando el usuario detenga el programa usando, por ejemplo CTRL + C, GStreamer pueda cerrar los archivos y todos los flujos correctamente.

También podemos hacer uso de los elementos tee y muxer al mismo tiempo. Con el siguiente comando podemos grabar video desde la webcam mas el audio del micrófono mientras previsualizamos la captura en una ventana:

1
2
3
4
5
gst-launch-0.10 -e v4l2src device=/dev/video0 ! video/x-raw-yuv,width=640,height=480,framerate=30/1 ! tee name=bifurcacion \
                   bifurcacion. ! queue ! ffmpegcolorspace ! ximagesink \
                   bifurcacion. ! queue ! ffmpegcolorspace ! vp8enc quality=10 speed=7 bitrate=1000000000 ! queue ! mezclador. \
                   alsasrc device=plughw:0,0 ! queue ! audioconvert ! queue ! vorbisenc ! queue ! mezclador. \
                   webmmux name=mezclador ! filesink location=webcam.webm
Grabando y previsualizando la grabación

Grabando y previsualizando la grabación

Bins

Un bin (contenedor) es un elemento que encapsula todo un pipeline completo. Por ejemplo para capturar imágenes de la webcam podemos utilizar el siguiente comando:

1
gst-launch-0.10 camerabin

ó

1
gst-launch-0.10 camerabin2

Los elementos camerabin y camerabin2 encapsulan todo un pipeline completo que permite mostrar la webcam en un ximagesink, grabar video, y hacer capturas de video, aunque desde linea de comandos solo está disponible la primera opción, las otras dos opciones solo están disponibles desde la API en C sólo para programadores.

Para reproducir un video, audio o visualizar una imagen desde el disco duro podemos usar el siguiente comando:

1
gst-launch-0.10 playbin uri='file:///ruta/completa/del/video.webm'

Si por el contrario queremos reproducir algún archivo que esta en internet usamos la dirección web del mismo:

1
gst-launch-0.10 playbin uri='http://www.pagina.com/del/archivo/de/musica.ogg'

También hay bins que en lugar de crear un reproductor completo solo descomprimen los archivos en sus señales básicas. Por ejemplo:

1
2
3
gst-launch-0.10  filesrc location=video.webm ! decodebin name=decodificador \
                 decodificador. ! ffmpegcolorspace ! ximagesink \
                 decodificador. ! audioconvert ! alsasink
Contenedor para decodificar flujos multimedia

Contenedor para decodificar flujos multimedia

Y por supuesto también tenemos su contraparte:

1
2
3
gst-launch-0.10 -e v4l2src device=/dev/video0 ! video/x-raw-yuv,width=640,height=480,framerate=30/1 ! ffmpegcolorspace ! codificador. \
                   alsasrc device=plughw:0,0 ! audioconvert ! codificador. \
                   encodebin name=codificador ! filesink location=video.webm
Contenedor para codificar flujos multimedia

Contenedor para codificar flujos multimedia

Composición de Video

Otra potente opción que nos ofrece GStreamer es la de hacer composiciones de video utilizando varias fuentes utilizando el elemento videomixer el cual funciona de manera similar a un muxer. Veamos un ejemplo sencillo:

1
2
3
gst-launch-0.10 videotestsrc ! video/x-raw-yuv,width=320,height=240,framerate=30/1 ! mezclador. \
                videotestsrc pattern='ball' ! video/x-raw-yuv,width=160,height=120,framerate=30/1 ! mezclador. \
                videomixer name=mezclador ! ffmpegcolorspace ! xvimagesink
Diagrama del mezclador de video

Diagrama del mezclador de video

El resultado será este:

Mezclando fujos de video con GStreamer

Mezclando fujos de video con GStreamer

Como podrás notar, la fuente de video que se declara primero es la primera que se dibuja y que la última que se declara es la última que se dibuja, por defecto videomixer dibuja las fuentes en el mismo orden en el que se las declara.

Por supuesto GStreamer provee un mecanismo muy simple por el cual no solo podemos cambiar el orden de dibujo, sino que también podemos cambiar la posición en la que se dibuja cada fuente. El elemento que provee dicho mecanismo se llama videobox. Veamos un ejemplo:

1
2
3
4
5
6
7
8
9
gst-launch-0.10 videotestsrc pattern='smpte' ! video/x-raw-yuv,width=160,height=120,framerate=30/1 ! \
                    videobox top=0 left=0 border-alpha=0 ! mezclador. \
                videotestsrc pattern='snow' ! video/x-raw-yuv,width=160,height=120,framerate=30/1 ! \
                    videobox top=0 left=-160 border-alpha=0 ! mezclador. \
                videotestsrc pattern='circular' ! video/x-raw-yuv,width=160,height=120,framerate=30/1 ! \
                    videobox top=-120 left=0 border-alpha=0 ! mezclador. \
                videotestsrc pattern='ball' ! video/x-raw-yuv,width=160,height=120,framerate=30/1 ! \
                    videobox top=-120 left=-160 border-alpha=0 ! mezclador. \
                videomixer name=mezclador ! ffmpegcolorspace ! xvimagesink
Diagrama de ejemplo para videobox

Diagrama de ejemplo para videobox

Las propiedades top, left, bottom y right indican la separación entre el cuadro y su posición originasl en el lateral correspondiente. Las propiedad border-alpha indica la visibilidad que tendrá el borde del cuadro.

Este será el resultado:

Ejemplo de uso de videobox

Ejemplo de uso de videobox

Superposición de Texto

GStreamer también nos permite superponer texto sobre una imagen usando el elemento textoverlay. Aquí un ejemplo:

1
2
3
gst-launch-0.10 videotestsrc pattern='snow' ! \
                textoverlay font-desc="Sans Bold 30" text='No hay señal de TV ;(' valign=bottom halign=center color=4294967040 ! \
                ffmpegcolorspace ! xvimagesink
Diagrama de superposición de texto

Diagrama de superposición de texto

La propiedad font-desc permite seleccionar el nombre, los atributos y el tamaño de la fuente a utilizar. Las propiedades valign y halign permiten alinear el texto. La propiedad color es un entero que representa un color en el formato ARGB, por ejemplo: 0xFFFFFF00 (amarillo) = 4294967040.

Este es el resultado:

Insertando texto con GStreamer

Insertando texto con GStreamer

Efectos de Audio y Video

GStrreamer también nos ofrece la posibilidad de aplicar efectos tanto de imagen como de sonido.

El siguiente ejemplo aplica un efecto de distorsión a la webcam:

1
gst-launch-0.10 v4l2src device=/dev/video0 ! video/x-raw-yuv,width=640,height=480,framerate=30/1 ! ffmpegcolorspace ! square ! ffmpegcolorspace ! ximagesink
Diagrama de efectos

Diagrama de efectos

Esta es la imagen original sin el efecto de distorsión:

Imagen cortesía de flickr

Imagen cortesía de flickr

Y esta la imagen de la webcam con el efecto aplicado:

Imagen con efectos

Imagen con efectos

Aquí dejo una lista de todos los plugins de efectos de video:

  • agingtv
  • bulge
  • burn
  • chromium
  • dicetv
  • edgetv
  • exclusion
  • fisheye
  • kaleidoscope
  • marble
  • mirror
  • optv
  • pinch
  • quarktv
  • radioactv
  • revtv
  • rippletv
  • shagadelictv
  • solarize
  • sphere
  • square
  • streaktv
  • stretch
  • tunnel
  • twirl
  • vertigotv
  • warptv
  • waterripple

Y para aplicar efectos de sonido, en este caso un efecto de eco (se recomienda usar auriculares para evitar acoplamiento):

1
gst-launch-0.10 alsasrc device=plughw:0,0 ! audioconvert ! audioecho intensity=0.6 feedback=0.4 delay=400000000 ! audioconvert ! alsasink
Diagrama de efectos de audio

Diagrama de efectos de audio

Aquí dejo una lista de todos los plugins de efectos de audio:

  • audioamplify
  • audiochebband
  • audiocheblimit
  • audiodynamic
  • audioecho
  • audiofirfilter
  • audioiirfilter
  • audioinvert
  • audiopanorama
  • audiokaraoke
  • audiowsincband
  • audiowsinclimit

Visualizacion de Audio

Hace hace algunos años estaban de moda los reproductores de música que traían visualizaciones integradas. Las visualizaciones de audio son aquellos gráficos que cambian su forma de acuerdo con el compás y estridencia de la música.

Para los nostálgicos, aquí está el comando para mostrar dichas visualizaciones al ritmo de la música:

1
2
3
gst-launch-0.10 filesrc location=musica.ogg ! decodebin ! tee name=bifurcacion \
                bifurcacion. ! queue ! audioconvert ! alsasink \
                bifurcacion. ! queue ! audioconvert ! goom2k1 ! ffmpegcolorspace ! ximagesink
Diagrama de efectos

Diagrama de efectos

Este es el resultado:

Visualizaciones de audio con GStreamer

Visualizaciones de audio con GStreamer

Aquí dejo una lista de todos los plugins de visualizaciones:

  • goom
  • goom2k1
  • libvisual
  • monoscope
  • spacescope
  • spectrascope
  • synaescope
  • wavescope

Fin

Y llegamos al final de esta pequeña introducción a la magnífica herramienta multimedia que es GStreamer. Pueden encontrar más información en la página del proyecto aquí abajo.


GStreamer | Página principal de GStreamer
GStreamer | Resumen de todos los plugins para GStreamer


Temas:
Actualidad, Documentación, Entretenimiento, GNU y Software Libre, Multimedia, Programación


Etiquetas:
, , ,

Feed Espacio LinuxSi este artículo ha sido de tu interés, considera hacer un comentario o suscribirte al feed para que te enteres de nuevos artículos a través de tu lector de noticias o email.

Acerca del autor

Avatar image

14 Comentarios para “Super tutorial de introducción a GStreamer”

  1. Usamos a diario Gstreamer pero apenas si sabemos de el…..

    Impresionante, excelente aporte ¿y dices que solo es una pequeña introducción? como será entonces la introducción completa!!!

    Un saludo

  2. Excelente introductorio, felicitaciones por el buen trabajo.

    Saludos.

  3. Avatar image

    Y todavía faltaría, por ejemplo, explicar como hacer streaming usando rtpbin, por ejemplo para hacer transmisión de radio o TV por internet, o para hacer video llamadas, pero esto ya es un poco más complicado de explicar, hay que tener algunos conocimientos extras.

  4. Avatar image

    Muy buen tutorial introductorio. Estuve ejecutando alguno que otro comando. Te felicito.

    Saludos

  5. Demasiado para asimilarlo de una tacada..

    ¿¿ Puedes publicarlo para poderlo imprimir y releerlo un par de veces ??

    Gracias….

  6. Avatar image
  7. Yo deseo hacer una consulta, tengo fedora 17 en mi portatil y desintale unos programas de audio y video que no necesitaba, sin embargo se desintalaron otros complementos.  ahora tengo problemas con Cheese, Rhytbmbox y otros que usan gstreamer, pues unos me dicen que no encuentran un complemento multiplexor y otros que faltan complementos necesarios, así con este modo, cheese no me da imagen y los menús no funcionana, rhythmbox no da sonido en mp3…he desintalado y vuelto a instalar los programas y los codecs y el problema sigue ahi…
    Me gustaría saber si me pueden dar alguna luz sobre el problema para resolverlo.
    Muy agradecido y felicitacione por tus publicaciones.

  8. Avatar image

    Prueba reinstalando todos los paquetes de GStreamer:

    yum install gstreamer gstreamer-plugins-good gstreamer-plugins-bad gstreamer-plugins-bad-free gstreamer-plugins-bad-free-extras gstreamer-plugins-bad-nonfree gstreamer-ffmpeg gstreamer-plugins-uglyEso ya debería reinstalar todas las dependencias.

  9. Pues he tratado de volver a instalar todos los codecs que me pusiste arriba, sin embargo sigue igual y la terminal me dice que no hay nada que hacer, que todos ya estan instalados:
    Package gstreamer-0.10.36-1.fc17.x86_64 already installed and latest versionPackage gstreamer-plusugins-good-0.10.31-4.fc17.x86_64 already installed and latest versionPackage gstreamer-plugins-bad-0.10.22-4.fc17.x86_64 already installed and latest versionPackage gstreamer-plugins-bad-free-0.10.23-7.fc17.x86_64 already installed and latest versionPackage gstreamer-plugins-bad-free-extras-0.10.23-7.fc17.x86_64 already installed and latest versionPackage gstreamer-plugins-bad-nonfree-0.10.22-3.fc17.x86_64 already installed and latest versionPackage gstreamer-ffmpeg-0.10.13-5.fc17.x86_64 already installed and latest versionPackage gstreamer-plugins-ugly-0.10.19-1.fc17.x86_64 already installed and latest versionNothing to do

    Cuando inicio cheese como root me inicia normal, pero cuando lo hago como usuario normal me sale que faltan complementos de gstreamer, uso Cheese 3.4.2, es raro, el mensaje de la terminal sin root es:

    ** (cheese:3354): CRITICAL **: cheese_camera_create_effects_preview_bin: assertion `error == NULL || *error == NULL’ failed** (cheese:3354): WARNING **: cheese-window.vala:1624: Error: Faltan uno o más elementos necesarios de GStreamer: Faltan uno o más elementos necesarios de GStreamer: webmmux.

    En Rhythmbox pone el siguiente mensaje:

    Rhythmbox-Message: Missing plugin: gstreamer|0.10|rhythmbox|demultiplexor Etiqueta ID3|decoder-application/x-id3** Message: PackageKit: xid = 52428811** Message: PackageKit: Codec nice name: demultiplexor Etiqueta ID3** Message: PackageKit: structure: gstreamer0.10(decoder-application/x-id3)()(64bit)** Message: PackageKit: Did not install codec: GDBus.Error:org.freedesktop.PackageKit.Modify.Cancelled: did not agree to search(rhythmbox:3361): GLib-GObject-CRITICAL **: g_object_unref: assertion `G_IS_OBJECT (object)’ failed

    No sé como instalar esos complementos.

    Saludos desde Nicaragua

  10. Avatar image

    :/ es raro que funcione como root y no como usuario normal, prueba actualizando todo el sistema. Si el problema no se soluciona, quizás ya sea un problema propio de Fedora. Lamentablemente no puedo brindarte una ayuda más específica porque no uso Fedora, uso Arch.
    Si quieres puedes pasarte por el foro, allí hay algunos usuarios que usan Fedora y te pueden ayudar mejor.

  11. Ok gracias, pasaré por el foro, de todos modos tu tutorial me ha servido de mucho, he aprendido bastante.
    Un abrazo fraterno

  12. [...] más importantes es la posibilidad de aplicar algunos efectos simples al video, todo esto gracias a GStreamer ( ;D ), y habiendo eliminado a FFmpeg como dependencia. También se han agregado los idiomas [...]

  13. Muy buena introducción a GStreamer!

    Un abrazo.

  14. Muchas gracias por el tutorial ha sido de gran ayuda sobre todo para trabajar con processing, estoy haciendo mis pruebas aver que no más se puede lograr.

    Saludos de UIO

Publica un comentario

Puedes usar estas etiquetas XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <blockquote cite=""> <code> <em> <strong>