En este pequeño texto explicamos como se hicieron las grabaciones en formato
Ogg de las charlas del evento del 22 de octubre del 2002.
El método usado es lo primero que se nos ocurrió y no sabemos si es el
óptimo. El texto es simplemente para ayudar a los que lo necesiten.
Las grabaciones que teníamos eran el audio de una de las videocámaras, eso no
es bueno y lo ideal es grabar el audio directamente de la salida de monitor
del amplificador. Teníamos planeado esto pero lamentablemente falló.
Para grabar utilizamos el programa sox. Este programa permite no sólo
grabar sino manejar varios formatos distintos y aplicar filtros.
Las grabaciones las hicimos en formato WAV usando 16 bits de resolución
y una frecuencia de sampleo de 44,1 KHz. Estos son los valores aconsejables,
después podemos reducir la calidad usando sox, pero lo mejor es grabar con
buena calidad primero. Basicamente usamos calidad CD, pero monoaural. Esto
consume alrededor de 5,167 MB por minuto de grabación.
Para grabar usamos el siguiente script:
#!/bin/sh sox -t ossdsp -w -s -r 44100 -c 1 /dev/dsp -t wav - |
Este comando graba usando el dispositivo /dev/dsp y generando formato
WAV. El resultado es enviado a la salida standard. Al script lo llamamos
SoloGraba16bwav.sh y un ejemplo de uso sería:
./SoloGraba16bwav.sh > Marlon.wav
Para verificar la calidad usamos XMMS. Es importante ajustar la
ganancia de entrada para que no sature excesivamente. Para esto y para
seleccionar que entrada grabar usamos gmix. Hay que notar que es
preferible una leve saturación en los picos a desperdiciar rango dinámico,
pero hay que evitar que la saturación sea audible.
Sox está disponible en el paquete Debian homónimo.
Para entender un poco mejor que hace esa simple línea: todos los parámetros
que están antes de /dev/dsp seleccionan las opciones relacionadas con la
entrada de audio. En este caso estamos diciendo que el formato es el de los
dispositivos OSS, 16 bits (word), signed, 44100 Hz de sampleo
y un canal. Luego le indicamos cual es el archivo de entrada (en este caso un
dispositivo). Todos los parámetros que siguen son las opciones que afectan al
archivo de salida. En este caso indicamos que se use formato WAV. Y finalmente
viene el nombre del archivo de salida, en este caso el - indica que se envíe
a la salida estandar.
Hay que destacar que es posible usar sox para generar .oggs en forma directa
usando la opción de formato vorbis, pero no es recomendable ya que
normalmente querremos probar varias opciones de codificación o aplicar
filtrados.
Si fuimos conservadores en el volumen de grabación es muy probable que
nuestra grabación no haya aprovechado todo el rango dinámico disponible.
En este caso es recomendable aumentar el nivel de la grabación para que el
máximo pico use el máximo valor posible.
Para lograr esto utilizamos el siguiente script Perl que denominamos
Normaliza.pl:
#!/usr/bin/perl # Copyright (c) 2002 by Salvador Eduardo Tropea # Covered by the GPL license # $arch=$ARGV[0]; die "Archivo de entrada inexistente" unless -e $arch; print "Procesando $arch\n"; system("sox $arch -e stat 2> stat.txt"); open(FIL,"stat.txt") || die; $ajuste=-1; while ($a=<FIL>) { if ($a=~/Volume adjustment:\s*([\d\.]+)/) { $ajuste=$1; } } die "No pude encontrar el ajuste" if ($ajuste<0); die "Ajuste innecesario" if ($ajuste==1); print "Ajustando volumen con $ajuste\n"; rename($arch,"old.wav"); system("sox old.wav -v $ajuste $arch"); unlink('old.wav'); 0; |
Para usarlo basta con pasarle el nombre del archivo a normalizar.
El formato Ogg es muy eficiente por lo que es posible obtener buenos
resultados para bitrates tan bajos como 27 Kb/s. Nuestro problema es que
algunas de las charlas estaban en portuñol y que el audio tomado de
la cámara tenía una reverberancia muy grande. Por estas razones decidimos
crear dos versiones del audio: Una de unos 27 Kb/s y otra de alrededor de
61 Kb/s.
Para realizar la codificación usamos el programa oggenc v0.9 rc3
incluido en el paquete Debian vorbis-tools 1.0rc3-1. El mismo incluye
un programa reproductor de línea de comandos de muy buena calidad:
ogg123.
Para generar los .ogg usamos el siguiente script Perl que llamamos
Wav2Ogg.pl:
#!/usr/bin/perl # Copyright (c) 2002 by Salvador Eduardo Tropea # Covered by the GPL license # # Genera los dos Ogg (~27 kb/s y ~61 kb/s) a partir del WAV (44.1 KHz, 16 # bits con signo, mono) # El primer argumento es el .wav # El segundo argumento es el comentario en el Ogg $nombre=$ARGV[0]; $coment=$ARGV[1]; $chico="sox $nombre.wav -t wav -r 11025 - | oggenc -o $nombre-27kb.ogg -t \"GNU/Linux: Experiencia y situacion del Software Libre en el Mercosur\" -c \"$coment\" -"; $grande="oggenc -o $nombre-61kb.ogg -t \"GNU/Linux: Experiencia y situacion del Software Libre en el Mercosur\" -c \"$coment\" $nombre.wav"; print "Corriendo $chico\n"; system($chico); print "Corriendo $grande\n"; system($grande); |
Un ejemplo de uso sería:
./Wav2Ogg.pl Marlon "Marlon Dutra (Debian-RS, Brasil)"
Esto convierte el archivo Marlon.wav a los dos Ogg deseados.
La primer conversión usa sox para bajar el sample rate a 11,025 KHz y envía
la información en formato RAW a oggenc. La opción -t indica
el título del Ogg y -c un comentario.
La ventaja de usar el formato WAV es que el mismo es soportado por muchas
herramientas y que el header del archivo le da toda la información necesaria
a oggenc.
Para verificar el resultado conviene usar ogg123 y ogginfo.