jueves, 30 de enero de 2020

Reordenar las pistas en un fichero mkv

En estas últimas semanas he tenido un pequeño problema en la manera de reordenar las pistas en ficheros matroska. Todo nace en que una de mis televisiones no lee formato flac de sonido. A los ficheros matroska con alguna pista de sonido con formato flac suelo extraerle la/s pista/s flac (para más detalles, ya lo hemos visto aquí):


mkvextract origen.mkv tracks x:salida.flac

y convertirlas a aac con soundkonverter, una máscara gráfica de diferentes conversores de audio, muy fácil de usar, que permite muchos tipos de codificación y facilita la configuración de la transformación con mucho detalle.
Una vez transformadas, simplemente inyectamos la pista aac en el fichero matroska a través de MKVToolNix Gui, de una forma gráfica y mucho más sencilla que mkvmerge.


Una vez insertada, la colocaba en la posición que deseaba simplemente picando con el ratón y moviéndola a mi gusto. Sin embargo desde hace alguna versiones no es posible recolocarlas de esta manera. No tiene más importancia, pero en ocasiones nos interesa colocarla en algún lugar particular, por ejemplo para que sea la segunda pista de sonido, justo después de la predefinida, o para que se pueda ver entre un montón de pistas, cuando por ejemplo hay muchos subtítulos. Pues ayer decidí comprobar por fin de qué manera se puede mover las pistas sin la ayuda del ratón. La forma más fácil es mantener pulsado Ctrl y ordenar mediante las flechas direccionales. Para más información para curiosos, os dejo el enlace a este vídeo que es bastante aclaratorio. No me han funcionado todas las maneras indicadas en él, pero ahora ya puedo volver a colocar las pistas como quiero. ¡Qué cosa tan sencilla y lo que he tardado en averiguar como funcionaba!

jueves, 16 de enero de 2020

Gnome 3.34 y los indicadores de las apps; se ven y ya no se ven

Aunque soy un usuario contento con las últimas versiones de gnome, la 3.34 ha traído algunos problemas de funcionamiento. El principal es la desaparición de los iconos de las aplicaciones en el panel superior. Eso viene de más atrás en el desarrollo de gnome, pero en la versión 3.34 dejaron de funcionar las extensiones que nos permitían seguir viéndolos, como TopIcon Plus. La extensión que estoy usando es KStatusNotifierItem/AppIndicator Support, pero ha aparecido un nuevo problema. El estado habitual al arrancar el sistema es el siguiente, con los iconos en el panel, como se puede ver,


y se pueden manejar los menús, como afirma la extensión kstatus...


Sin embargo, al ocultar el escritorio —Ctrl + L— y luego volver ha mostrarlo desaparecen


Un problema, sobre todo por que no estás seguro de que Dropbox esté conectado y tienes que comprobarlo. Al menos en mi caso desde que gnome está en la versión 3.34 no se me corta Dropbox, por que en la versión que acompañaba a Fedora 30 estaba todo el día ejecutando start dropbox, ya que desaparecía y a veces llegaba al trabajo y no estaba lo que había preparado en casa o al revés y acabé ejecutando casi como rutina ese comando antes de dejar cada uno de los ordenadores.
A esto se puede sumar que la extensión EasyScreenCast no funciona en gnome 3.34. Reconozco que son pequeños problemas, frente a lo bien que va ahora gnome respecto a versiones anteriores, pero molestan un poco.


martes, 7 de enero de 2020

Conversión de sonido TrueHD: la vieja confiable ffmpeg

En estos días de Navidad nos han dado muchas cosas, y entre ellas un fichero matroska de una de las películas que más me ha gustado en mi vida. Jamás había visto ninguna versión, original o copia, con esa calidad. Sin embargo, presentaba varías características que me hizo difícil verla como yo quería; primero, la pista del sonido en lengua original estaba en TrueHD 5.1; segundo, los subtítulos estaban en formato PGS (Presentation Graphic Stream subtitle format). Estos formatos no generan ningún problema en el ordenador, pero prefiero ver una película como esta con más calidad, con más tamaño y con un sonido mejor que el que puede generar un monitor de 24' con altavoces de 2W. Ninguna de las dos televisiones LG de las que dispongo pudo decodificar el sonido TrueHD ni los subtítulos PGS. Ya hemos explicado en una entrada anterior como se transforma un subtítulo PGS, que es una imagen, a un formato texto srt; sin embargo, como es un trabajo laborioso y como entre las muchas versiones de las que dispongo de esa película se incluye —incluía, por que ésta la ha sustituido—  una Versión Final con la misma duración con subtítulos srt extraje esos ficheros del mkv. Pero una cosa muy distinta es el sonido. El formato TrueHD ofrece un sonido sin pérdida de calidad en la compresión y no merecía la pena recurrir a un AC3 antiguo, con lo que el primer objetivo fue la transformación del TrueHD a un formato que mis dispositivos pudieran leer. La extracción siempre es sencilla utilizando mkvextract

mkvextract origen.mkv tracks x:salida.ingles.truehd

siendo x el número de pista que queremos extraer, y teniendo en cuenta que mkvextract empieza a contar sobre cero; es decir, si vídeo = 0, sonido español = 1, sonido inglés TrueHD = 2, PGS Español = 3...
La extracción fue la parte fácil. En general, cuando se trata de transformar un audio extraído de esa manera —en mi caso casi siempre para convertir FLAC a AAC—, utilizo soundkonverter, que es una máscara gráfica —GUI, de Graphical User Interface o a veces wrapper— de ffmpeg, software que lo convierte todo.


Sin embargo, soundkonverter no reconocía el fichero con sonido TrueHD, así que busqué alternativas en el mundo —en google—. Las opciones que aparecían eran:
- de truehd a flac con audiomuxer; es de windows y prefiero no pasar por flac (maneja 5.1?; la televisión más grande y gorda que tengo no lee flac...)
- popcorn mkvaudioconverter: y eto que é?
- eac3to

De todos ellos, incluso intenté usar eac3to en wine, pero faltaban codecs intermedios y no era capaz de construir adecuadamente el comando. Cuando todo falla, tendemos a recurrir a la vieja confiable, que nos soluciona todo; es decir, un simple comando de ffmpeg sin máscaras

ffmpeg -i sonido.in.truehd sonido.in.aac

y todo lo demás lo ajustó directamente ffmpeg. Vean al final de la entrada la salida en el terminal.
Además, al incorporar los subtítulos srt DESPUÉS de los PGS, las máquinas LG tampoco pudieron leerlos, así que finalmente eliminé los PGS. La pista TrueHD no la eliminé, simplemente añadí la aac después, por si algún otro dispositivo lo puede leer TrueHD en el futuro, o en alguna actualización de las LG tienen a bien incorporar este codec. Por cierto, el sonido TrueHD ocupa, para 1h58m 3,2GB, miestras que aac comprimido a máxima calidad —sí, con perdida, lo sé, pero FLAC no leen mis dispositivos y PCM ocupa hasta el infinito y más allá— ocupa la décima parte.

Qué no encuentras una solución nueva, ¡usa la de toda la vida!


Resultado del comando en el terminal
$ ffmpeg -i blader.in.truehd blader.in.aac
ffmpeg version 4.2.1 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 9 (GCC)
  configuration: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --docdir=/usr/share/doc/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --mandir=/usr/share/man --arch=x86_64 --optflags='-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection' --extra-ldflags='-Wl,-z,relro -Wl,--as-needed -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld ' --extra-cflags=' ' --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvo-amrwbenc --enable-version3 --enable-bzlib --disable-crystalhd --enable-fontconfig --enable-frei0r --enable-gcrypt --enable-gnutls --enable-ladspa --enable-libaom --enable-libdav1d --enable-libass --enable-libbluray --enable-libcdio --enable-libdrm --enable-libjack --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libmp3lame --enable-nvenc --enable-openal --enable-opencl --enable-opengl --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librsvg --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libvorbis --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-libzvbi --enable-avfilter --enable-avresample --enable-postproc --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --disable-stripping --shlibdir=/usr/lib64 --enable-libmfx --enable-runtime-cpudetect
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
  libpostproc    55.  5.100 / 55.  5.100
Input #0, truehd, from 'blader.in.truehd':
  Duration: N/A, start: 0.000000, bitrate: N/A
    Stream #0:0: Audio: truehd, 48000 Hz, 5.1(side), s32 (24 bit)
Stream mapping:
  Stream #0:0 -> #0:0 (truehd (native) -> aac (native))
Press [q] to stop, [?] for help
[aac @ 0x55ed8a510b80] Using a PCE to encode channel layout "5.1(side)"
Output #0, adts, to 'blader.in.aac':
  Metadata:
    encoder         : Lavf58.29.100
    Stream #0:0: Audio: aac (LC), 48000 Hz, 5.1(side), fltp (24 bit), 394 kb/s
    Metadata:
      encoder         : Lavc58.54.100 aac
size=  341245kB time=01:57:36.85 bitrate= 396.1kbits/s speed=17.8x    
video:0kB audio:338984kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.667078%
[aac @ 0x55ed8a510b80] Qavg: 418.332