PC Frikis

Beta, como Goooogle

Archive for Mayo, 2009

Convertir audio de DTS a AC3

Recientemente hemos adquirido un televisor Samsung B651 capaz de reproducir archivos de vídeo desde un dispositivo USB, como por ejemplo un disco duro externo (otro día hablaremos más de este televisor, de momento, más info aquí).

La cuestión es que no es capaz de reproducir audio DTS y tengo algunos ficheros de vídeo que solamente tienen el audio en DTS así que la única solución de momento es recodificar el audio en AC3. No hay que preocuparse mucho por la diferencia de formatos, pues ambos son bastante similares en cuanto a prestaciones y la posible pérdida en la recodificación es mínima.

El proceso lo realizaremos en linux, en debian por ejemplo es necesario instalar los paquetes mkvtoolnix, mkvtoolnix-gui, aften y libdca-utils

El fichero que contiene este tipo de audios suele ser un mkv así que lo primero es extraer la pista DTS del MKV.

$ mkvmerge -i fichero-de-video.mkv

Al hacerlo aparecerá el contenido del fichero mkv, las pistas de vídeo, audio, subtítulos, ficheros adjuntos, etc. En concreto, veremos algo así:

File ‘fichero-de-video.mkv’: container: Matroska
Track ID 1: video (V_MPEG4/ISO/AVC)
Track ID 2: audio (A_DTS)
Track ID 3: audio (A_DTS)
Track ID 4: audio (A_VORBIS)
Track ID 5: subtitles (S_TEXT/ASS)
Track ID 6: subtitles (S_TEXT/ASS)
Track ID 7: subtitles (S_TEXT/ASS)

Como podemos observar, hay dos pistas de audio en formato DTS. En un principio vamos a pasar la pista 2, de DTS a AC3. Primero hay que extraer la pista del fichero mkv con el siguiente comando:

$ mkvextract tracks fichero-de-video.mkv 2:spanish.dts

Esto lo que hace es sacar la pista 2 del fichero mkv, que en este caso es una pista de audio en castellano, en DTS, y lo guarda con el nombre “spanish.dts”.

A continuación, para convertir de DTS a AC3 primero hay que decodificar el DTS en WAV y finalmente pasar el WAV a AC3, pero podemos hacerlo todo directamente con el siguiente comando:

$ dcadec -o wavall spanish.dts | aften - spanish.ac3

Una vez finalizado el proceso ya tendremos el audio en AC3. Ahora solo queda introducir el audio de nuevo en el mkv. En mi caso, necesitaba que la pista AC3 fuese la primera pista de audio, es decir, la posición 2 del fichero mkv, pero no fui capaz de hacerlo mediante comandos, así que recomiendo lanzar el GUI de mkvtoolnix para meter el AC3 en el fichero mkv. La gui se puede lanzar mediante el comando “mmg”.

screenshot-mkvmerge

Una vez abierta la ventana del mkvmerge hay que añadir (botón add) tanto el fichero mkv original como el fichero .ac3 resultante. En el apartado de “tracks” podemos ordenar cada una de las pistas del fichero. En mi caso he puesto el AC3 como la pista 2. Por cada pista podemos editar sus opciones, indicar el lenguaje, si es el audio preferido, etc. Por último, en “Output Filename” indicamos el fichero donde queremos que se guarde el mkv final y pulsamos en “Start muxing”.

Eso es todo, una vez finalizado el proceso tendremos un fichero mkv con una nueva pista de audio en AC3.

En estos tiempos de Web 2.0 las aplicaciones online requieren cada vez un mejor rendimiento por parte del servidor. El mundo de la optimización de aplicaciones es un tema que da mucho para hablar, hay soluciones complejas que requieren replantear gran parte del proyecto y otras que se pueden aplicar en unos pocos minutos.

Una de esas optimizaciones rápidas de aplicar es mejorar la manera en la que son ejecutadas las aplicaciones PHP, para webs desarrolladas en este lenguaje, obviamente.

Aunque PHP sea un lenguaje interpretado, es decir, que no necesitamos más que subir los ficheros .php y directamente el intérprete se encarga de ejecutarlos, sin necesidad de haberlos compilado previamente. Pero en realidad, lo que hace el intérprete es “parsear” el código, compilarlo en bytecode y por último ejecutar este bytecode. Estas operaciones se realizan una y otra vez por una petición que se hace a un script PHP. Viendo esto, sin mucho esfuerzo podemos pensar que lo más lógico sería “parsear” y compilar en bytecode el código fuente una sola vez, mantener en memoria el bytecode mientras no se modifique el código fuente y ejecutar solamente el bytecode por cada petición.

Pues bien, esto es lo que hace APC. Este sistema reserva una zona de la memoria para cachear bytecodes. Cuando llega una petición a un fichero PHP, APC revisa si ese fichero ya está en la cache, si está en cache y el fichero no se ha modificado desde la última vez que se cacheó, entonces se ejecuta el bytecode que hay en cache. Si no, APC se encargará de actualizar el bytecode en cache para que las próximas peticiones sean más rápidas.

¿Por qué APC? Hay otros sistemas que implementan el mismo concepto, algunos de ellos se pueden ver comparados en la Wikipedia, pero APC se ha convertido en el acelerador oficial de PHP, ya que va a ser integrado su desarrollo a partir de PHP 6. Además, es muy fácil de instalar como podemos comprobar a continuación.

Para instalar APC en Debian se pueden seguir los pasos siguientes. Aunque en otras distribuciones el procedimiento es muy similar.

1 – Instalamos los paquetes necesarios

# apt-get install apache2-prefork-dev php5-dev php-pear

2 – Ejecutamos pecl, el instalador de extensiones de php

# pecl install apc

3 – Modificamos el fichero /etc/php5/apache2/php.ini y añadimos al final:

extension=apc.so

4- Reiniciar apache

# /etc/init.d/apache2 restart

Listo. Para comprobar que todo ha funcionado correctamente tan solo tenemos que crear un fichero con la instrucción phpinfo(); para ver si aparece la extensión APC.

APC phpinfo

Por último, para monitorizar el funcionamiento de APC podemos copiar el script que hay en /usr/share/php/apc.php a un directorio accesible desde http y al entrar en él http://xx.xx.xx.xx/apc.php, se pueden ver varios gráficos y tablas de información con el estado de APC. También es posible modificar el archivo apc.php para indicar una contraseña y así acceder a la zona privada con algunos datos más sobre el cacheo de scripts.

Después de haber instalado el APC en algunos servidores, la impresión es que la carga se ha reducido notablemente. Es una impresión personal, ya que no he tenido tiempo de hacer mediciones más serias.

Enlaces de Interés