Tuberías (pipelines) en GStreamer

GStreamer es una biblioteca que sirve como capa de abstracción para un chorro de codecs de audio y vídeo en los escritorios Linux. Es genial en el sentido de que hace trivial el hecho de que una aplicación pueda leer distintos formatos.
A la hora de extraer audio de CDs, nos encontramos con un problema: Elegir el perfil de audio.

¿Qué es un perfil de audio?

Básicamente es dar un nombre y descripción “legible para humanos” a una tubería (o pipeline) de GStreamer.

Aaaam ahora lo tengo todo claro… no, en serio, ¿qué es una tubería o pipeline de GStreamer?

Básicamente le indica a GStreamer cómo tiene que entrar el vídeo o audio, qué debe hacer con él, y cómo debe de salir.

¿Qué aspecto tiene?

Algo así:

audio/x-raw-int,rate=44100,channels=2 ! lame name=enc mode=0 vbr=4 vbr-quality=4 ! xingmux ! id3v2mux

¿Comoooorr?

Vale, vayamos por partes.

  • El signo de exclamación es el equivalente al “|” en la consola, coge la salida del comando anterior y lo manda a la entrada del siguiente.
  • En la primera parte indicas que es audio y qué tipo.
  • En la segunda usas el plugin LAME, para transformar a MP3. LAME tiene sus peculiaridades. Lo que hacemos aquí es:
  • name=enc le da un nombre al objeto. Realmente no tengo muy claro que sea necesario, pero si venía así por algo será…
  • mode=0 significa que la pista es estéreo.
  • vbr=4 hace que usemos el algoritmo nuevo de LAME para codificar en VBR.
  • vbr-quality=4 simplemente es una escala del 0 (mejor) al 9 (peor) para ver la calidad del audio que queremos sacar
  • La penúltima parte (xingmux) arregla una cosa que se llaman xing headers del mp3. Se usan cuando el mp3 tiene bitrate variable (VBR, saca mayor calidad en menor espacio).
  • id3v2mux le aplica las etiquetas ID3 al fichero creado.
  • ¿Y cómo sabes tú eso?

    Fácil, abre una terminal y escribe:
    gst-inspect-0.10 lame | less

    Lo de less no hace falta pero te facilita la lectura. Para salir pulsa q.

    Empiezo a entenderlo… ¿Entonces es esto lo que tengo que hacer para codificar mp3?

    Pues me alegro de que empieces a entenderlo, pero no es esto lo que deberías hacer.
    Verás, el complemento lame que hemos usado es el que viene configurado en distros como Debian o Ubuntu, pero si echamos un vistazo a la documentación oficial de GStreamer respecto a codificar mp3, veremos que este ha quedado obsoleto. Ahora se usa el complemento lamemp3enc.

    Jo, ahora que me conocía este…

    Tranquilo, este complemento es mucho más fácil de usar y aprender. Esta es la tubería que uso yo:

    audio/x-raw-int,rate=44100,channels=2 ! lamemp3enc ! xingmux ! id3v2mux

    Como ves, ni siquiera le he puesto ningún parámetro, porque los que trae por defecto son básicamente los que hemos puesto arriba con el complemento antiguo.

    ¿Me explicas entonces el lamemp3enc?

    No. Ya te he explicado el otro, y este funciona igual pero con distintos parámetros. Piensa un poco y averiguarás dónde encontrar dichos parámetros.

    Como nota adicional, este artículo también puede interesarte.
    Sé feliz😉

    3 comentarios en “Tuberías (pipelines) en GStreamer

    1. Hola viejo!. Acabo de encontrar tu blog. Y tengo una duda, respecto al pipeline para codificar en AAC. Mi pipeline tiene el siguiente formato:audio/x-raw-int,rate=44100,channels=2,name=legible,bitrate=256000 ! faac ! ffmux_mp4 ! id3v2muxLo ultimo para que me agregara las etiquetas ID3, pero no ha funcionado. Quiero que me codifique a 256 kbps y agregue todas las etiquetas ID3, llevo ya algun tiempo buscando y no encuentro donde. Espero puedas hecharme una mano. Buena entrada por cierto😀

    2. Hola Dan,Verás, las etiquetas se aplican con cualquier complemento que implemente la interfaz GstTagSetter [1].Este es el caso del id3v2mux, pero sólo funciona con ficheros mp3 [2]. Cada formato debe tener su complemento.Puedes obtener la lista fácilmente buscando en Google [3], pero no encuentro ninguno que especifique que funcione con AAC. A mí me da la impresión de que el más adecuado es el mp4mux, así que prueba lo siguiente:audio/x-raw-int,rate=44100,channels=2,name=legible,bitrate=256000 ! faac bitrate=256000 ! mp4muxYa me comentas si te ha funcionado o qué. Nos vemos ;)[1] http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/section-tags-write.html%5B2%5D http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good-plugins/html/gst-plugins-good-plugins-id3v2mux.html%5B3%5D http://www.google.es/search?q=site%3Agstreamer.freedesktop.org+implements+GstTagSetter

    Responder

    Introduce tus datos o haz clic en un icono para iniciar sesión:

    Logo de WordPress.com

    Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

    Imagen de Twitter

    Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

    Foto de Facebook

    Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

    Google+ photo

    Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

    Conectando a %s