Corregir el "Aspect Ratio" de un fichero Matroska

Estaba el otro día viendo un episodio de una serie y la imagen me aparecía "alargada" verticalmente. MPlayer me mostraba esto:

VIDEO:  [H264]  704x396  0bpp  25.000 fps    0.0 kbps ( 0.0 kbyte/s)
[...]
Movie-Aspect is 1.25:1 - prescaling to correct movie aspect.
VO: [xv] 704x396 => 704x564 Planar YV12

La fuente original indicó un Aspect Ratio de 1.25:1, que es patentemente incorrecto. La imagen se convierte de 704x396 a 704x564 pixels cuando no debería ser así.

Buscando dónde se guarda el Aspect Ratio en un fichero Matroska, compruebo que no se almacena de forma explícita, sino que en el fichero MKV se puede especificar la resolución de salida deseada. Por tanto podemos cambiar la resolución de salida o, simplemente, eliminar esa información incorrecta y dejar que el reproductor utilice la resolución original de la imagen:

$ mkvpropedit VIDEO.mkv --edit track:v1 --delete display-width --delete display-height
The file is being analyzed.
The changes are written to the file.
Done.

Ahora la imagen se ve correctamente y MPlayer me dice:

VIDEO:  [H264]  704x396  0bpp  25.000 fps    0.0 kbps ( 0.0 kbyte/s)
[...]
Movie-Aspect is 1.78:1 - prescaling to correct movie aspect.
VO: [xv] 704x396 => 704x396 Planar YV12

Con este cambio, el vídeo tiene el Aspect Ratio correcto de 1.78:1 (es decir, 16:9) y no se cambia la resolución de la imagen de forma artificial.

Problema resuelto.

Ejemplos de uso de los comandos AT del ESP8266

En ESP8266 y el "internet de las cosas" explico qué es el ESP8266. Tradicionalmente estos módulos vienen de serie con un intérprete de comandos AT. Su uso fundamental es servir de adaptador de puerto serie a WIFI para otro microcontrolador diferente.

No se trata de una configuración que yo necesite, así que lo primero que hago cuando me llega un ESP8266 es reprogramarlo. Antes de hacerlo, no obstante, quiero daros una impresión de cómo va la cosa y sus posibilidades.

La documentación del fabricante está en chino (literalmente), pero poco a poco se ha ido publicando información con cuentagotas en webs de terceros:

Leer más…

ESP8266 y el "internet de las cosas"

En 2014 se publicó un pequeño circuito integrado que, poco a poco, ha ido ganando fama: el ESP8266. Se trata de un microcontrolador bastante capaz de (relativamente) bajo consumo eléctrico y lo más interesante de todo es que incluye soporte WIFI integrado. El chip es lo bastante capaz como para que podamos programarlo en lenguajes de alto nivel como Lua o Python y el traer WIFI de serie permite una integración doméstica trivial: el famoso Internet de las cosas. ¡Y todo por menos de dos euros!

esp8266.jpg

Leer más…

Determinar automáticamente el desfase de audio en un fichero MKV

En Cómo corregir la desincronización de audio en un fichero Matroska explico cómo generar un fichero Matroska con los audios sincronizados, pero requiere determinar la desincronización precisa para poder compensarla. Este proceso suele ser bastante sencillo, pero requiere dedicarle unos minutos. La inmensa mayoría de las películas no tienen problemas así que la tentación es no comprobarlo de forma sistemática y, como no puede ser de otra manera, nos saltaremos justo la película que está mal.

Las causas de la desincronización son varias. En contenedores anticuados como AVI, usar sonido VBR o, incluso ABR, es una receta para el desastre. Afortunadamente esos contenedores están despareciendo (poco a poco, eso sí) y Matroska, el nuevo estándar, soporta audio VBR sin problemas merced al uso de códigos de tiempo en las pistas. Lo que está muy bien, porque Opus genera VBR por defecto.

No obstante, ocasionalmente, tenemos problemas de desincronización de audio y vídeo cuando generamos un fichero Matroska a partir de otro. ¿Por qué?.

Leer más…

Parches actualizados para "getmail"

En Migración de mi servidor de correo a IMAP4 y parches en "getmail" publico un parche para getmail que, entre otras cosas, detiene la descarga de correo cuando la partición IMAP4 se queda sin espacio, dejando algo de margen para poder procesar los buzones y hacer sitio.

Ese parche es incorrecto. Resulta que si se llena la partición la descarga se corta, pero los mensajes que se hayan recibido hasta ese momento no se borran en el servidor ni se deja constancia de su descarga. Es decir, cuando tengamos espacio libre... se volverán a descargar creando duplicados.

Esta fragilidad de getmail (hay muchas razones para que un programa falle en mitad de su ejecución) es fastidiosa, pero es lo que hay hasta que escriba un reemplazo. Estudiando el código y mirando cómo gestiona getmail los mensajes configurados como demasiado grandes, etc., veo que hay una forma "oficial" de hacer lo que quiero.

El parche actualizado, en formado diff, es el siguiente:

Leer más…

Compiling matplotlib in Solaris 10

Trying to install matplotlib 1.5.1 in my Solaris 10 machines produces the following compiling error:

[...]
    In file included from /usr/local/include/python3.5m/Python.h:36:0,
                     from src/mplutils.h:21,
                     from src/ft2font_wrapper.cpp:1:
    /usr/include/unistd.h:496:75: error: conflicting declaration of C function ‘void swab(const void*, void*, ssize_t)’
     extern void swab(const void *_RESTRICT_KYWD, void *_RESTRICT_KYWD, ssize_t);
                                                                               ^
    In file included from /usr/local/include/python3.5m/Python.h:34:0,
                     from src/mplutils.h:21,
                     from src/ft2font_wrapper.cpp:1:
    /usr/include/stdlib.h:143:13: note: previous declaration ‘void swab(const char*, char*, ssize_t)’
     extern void swab(const char *, char *, ssize_t);
                 ^
    error: command 'gcc' failed with exit status 1

    ----------------------------------------
  Rolling back uninstall of matplotlib

Leer más…

Compiling NumPy in Solaris 10

Trying to install NumPy 1.10.1 in my Solaris 10 machines produces the following compiling error:

[...]
/usr/local/bin/gfortran -Wall -g -Wall -g -shared -Wl,-gc-sections -Wl,-s -mimpure-text build/temp.solaris-2.10-i86pc.32bit-3.5/numpy/linalg/lapack_litemodule.o build/temp.solaris-2.10-i86pc.32bit-3.5/numpy/linalg/lapack_lite/python_xerbla.o -L/usr/local/lib -L/usr/local/lib/gcc/i386-pc-solaris2.10/5.3.0 -L/usr/local/lib -Lbuild/temp.solaris-2.10-i86pc.32bit-3.5 -llapack -lblas -lpython3.5m -lgfortran -o build/lib.solaris-2.10-i86pc.32bit-3.5/numpy/linalg/lapack_lite.so
    ld: fatal: unrecognized option '-g'
    ld: fatal: use the -z help option for usage information
    collect2: error: ld returned 1 exit status
    ld: fatal: unrecognized option '-g'
    ld: fatal: use the -z help option for usage information
    collect2: error: ld returned 1 exit status
    error: Command "/usr/local/bin/gfortran -Wall -g -Wall -g -shared -Wl,-gc-sections -Wl,-s -mimpure-text build/temp.solaris-2.10-i86pc.32bit-3.5/numpy/linalg/lapack_litemodule.o build/temp.solaris-2.10-i86pc.32bit-3.5/numpy/linalg/lapack_lite/python_xerbla.o -L/usr/local/lib -L/usr/local/lib/gcc/i386-pc-solaris2.10/5.3.0 -L/usr/local/lib -Lbuild/temp.solaris-2.10-i86pc.32bit-3.5 -llapack -lblas -lpython3.5m -lgfortran -o build/lib.solaris-2.10-i86pc.32bit-3.5/numpy/linalg/lapack_lite.so" failed with exit status 1

    ----------------------------------------
  Rolling back uninstall of numpy
Command "/usr/local/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-ottl5a7u/numpy/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-24agajji-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-ottl5a7u/numpy/

Leer más…

Tor, nodos "Bridge" y ofuscación

Para que un usuario pueda conectarse a la red Tor, es necesario que sepa dónde conectarse. Por tanto, los nodos Tor públicos están registrados y localizados. Sus IP están identificadas.

Esto tiene dos problemas:

  • De cara al administrador de ese nodo Tor, su IP está registrada. Si ese administrador usa esa IP para más cosas que el servicio Tor, puede experimentar problemas de acceso a algunos recursos. Existen multitud de organizaciones que no permiten el acceso desde la red Tor. Aunque el administrador no esté utilizando Tor para entrar en el servicio, su IP es la de un nodo Tor.

    Alguien con conocimiento sabe que la red Tor está compuesta por dos tipos de nodos: nodos repetidores y nodos de salida. Los únicos nodos que se conectan a la red abierta son los nodos de salida. Aunque filtrar Tor sea feo, puestos a hacerlo deberían filtrarse solo los nodos Tor de salida. Los nodos repetidores, la mayoría de la red Tor, solo se conectan a otros nodos Tor. Que un proveedor de información filtre tu conexión porque tu IP es la misma que un nodo repetidor no es efectivo para prevenir ningún ataque y, en cambio, penaliza al pobre administrador de ese nodo Tor.

    Esto es un problema muy real. A fecha de febrero de 2016 organizaciones como la Xunta de Galicia, la organización gestora de dominios española, o la mismísima http://www.red.es/ filtran el acceso desde IP de Tor, aunque se trate de nodos repetidores.

    Algunos tweets al respecto: 1, 2, 3.

  • De cara a un usuario de Tor que necesita acceder a la red desde un entorno hostil, el acceso puede estar filtrado por el enemigo o, como mínimo, el enemigo sabrá que está usando Tor. Este conocimiento en sí puede suponer un riesgo, ya sea porque en esa jurisdicción se trata de algo ilegal o simplemente resulta sospechoso. Puede posibilitar, incluso, un ataque de confirmación.

Las dos cuestiones a resolver, entonces, son:

Leer más…