En corto No. 12 -FFmpeg AV1

Si eres usuario de Firefox, es probable que en días recientes hayas visto notificaciones de Mozilla sobre el codec de video AV1 que promete una compresión de video incluso mayor a la de x265/HEVC mientras que, al mismo tiempo, es un formato abierto y libre de regalías.

Decidí hacer pruebas con este nuevo codec usando FFmpeg. Lo primero que noté es que la versión de FFmpeg en el repositorio estable de Debian aún no soporta este formato, así que tuve que ir directo a la página de FFmpeg donde me llevé la grata sorpresa de que ahora se ha unido a la creciente lista de software para que ofrece static builds, ejecutables precompilados y listos para usar para Linux. Ya en posts anteriores he mencionado lo difícil que era conseguir ejecutables listos para usar en Linux, lo que solía dejarte solamente dos opciones: usar una versión vieja del software o compilarlo tú mismo. Al parecer esto empieza a cambiar ya que cada vez veo más programas para Linux que ofrecen versiones listas para usar ya sea en forma de static builds o como contenedores de Docker, Flatpak, etc., y esto me alegra.

Volviendo a FFmpeg, la página ofrece la alternativa de instalarlo usando los repositorios de backports o deb-multimedia, o bien el ya mencionado static build. Descargué el static build y después de descomprimirlo estaba listo para usar; sin embargo, al intentar codificar un video usando el codec AV1 descubrí que la velocidad de codificación era de ~0.02 fps, en otras palabras, es imposible de usar 😦 .

Actualmente el codec AV1 está clasificado como experimental en FFmpeg por una razón y no está listo para el uso cotidiano. No hace mucho tiempo, el codec x265 también era muy lento en FFmpeg pero ha sido optimizado desde entonces. Es lógico pensar que seguramente el codec AV1 también será optimizado una vez que esté correctamente implementado. Hasta entonces, habrá que esperar.

Queja Firefox

Me siento culpable por escribir esto, he sido un usuario de Firefox literalmente desde su primera versión y aunque he probado otros navegadores siempre regreso a Firefox pero, ¡diablos!, hasta yo tengo que reconocer que los desarrolladores de Mozilla a veces toman decisiones de diseño bastante estúpidas. No es de sorprender que en los últimos años Firefox perdiera presencia y se convirtiera en un navegador de nicho usado solamente por nerds y fans del software libre (nerds). La gente normal evita Firefox como la plaga, incluso me ha pasado que cuando alguien me ve abrir Firefox me miran con lástima y me dicen “¿Por qué no bajas el Chrome? Es gratis”.

Ya antes escribí un post sobre la molestia generalizada que causó entre sus propios usuarios cuando Firefox decidió quitar el soporte para complementos que no usaran Web Extensions. Por suerte el NoScript se adaptó rápidamente al nuevo modelo pero la decisión afectó a muchos complementos, ¡incluso algunos propios de Mozilla!, que ya no son compatibles 😦 . No más Scrapbook, no más soporte para guardar archivos MAFF (de vuelta al horrible sistema de .html + carpeta), ¡hasta el complemento de Mozilla para checar si tus complementos son compatibles es incompatible!.

firefox-addons

Luego está la idea de Mozilla de “notificaciones no intrusivas” cuando Firefox te pregunta si quieres guardar tus contraseñas o recibir notificaciones de páginas, el mensaje no desaparecerá y se quedará estorbando hasta que no lo cierres manualmente 😦 . Por otro lado, cuando quieres control manual del reproductor de video integrado de Firefox (no un reproductor Javascript como el de youtube sino el reproductor nativo de Firefox) haces click sobre el video para que tenga el focus del teclado para poder poner y quitar la pausa con el teclado pero el focus desaparece sin razón aparente obligándote a usar el mouse 😦 .

Y aún hay más, como una de las decisiones de diseño más estúpidas de Firefox en la que hace tiempo cambiaron el comportamiento de la barra de direcciones de algo que era confiable y tenía sentido a un comportamiento al azar porque “oh, so random!”. No, en serio, en versiones anteriores de Firefox, cuando empezabas a escribir en la barra de direcciones, la primer sugerencia siempre era la página que visitabas con más frecuencia, así que podía ser www.google.com o monstrochan.org/l/, las sugerencias siempre eran consistentes así que podías escribir unas cuantas letras y después presionar Abajo y Enter y estabas en la página que querías visitar. Ahora, en cambio, tienes que perder tiempo revisando las sugerencias porque nunca sabes si la primera sugerencia es la página que quieres visitar, el dominio principal que nunca visitas (como la página principal de monstrochan.org) o una búsqueda en Google de lo que has escrito en la barra de direcciones 😦 .

Por último, la más reciente molestia con Firefox y la que me hizo escribir este post. Firefox te permite personalizar la barra de herramientas pero ¿cuál es el caso si cada que se instala una actualización ignora tu configuración personalizada 😦 ?.

firefox-2

Barra de herramientas personalizada

firefox-1

Barra de herramientas después de cada actualización de Firefox

La mayoría de estas molestias son cosas sencillas que no deben requerir mucho trabajo o código para corregirse pero entonces, ¿por qué siguen existiendo estas fallas o apareciendo nuevas molestias con cada nueva versión de Firefox?. Pareciera que los desarrolladores están más preocupados agregando nuevas animaciones inútiles o cambiando la paleta por colores pastel para complacer a la nueva sociedad SJW en lugar de trabajar en hacer que la interfaz trabaje de una forma confiable y consistente 😦 .

Grabar DVD en Debian Stretch

Después de años sin grabar un DVD, hace poco me vi en la necesidad de volver a utilizar el arcano arte de usar el quemador de discos de mi PC. En el pasado escribí un par de posts sobre las herramientas para grabar CD/DVD en Linux pero no puedo creer que nunca escribí un post con las instrucciones para grabar un disco con esas herramientas. En posts anteriores mencioné que tuve malas experiencias con algunas herramientas GUI y había otras con las que simplemente no podía soportar su horrible interfaz gráfica así que la línea de comandos era la última alternativa.

Desde que actualicé a Debian Stretch no recuerdo haber grabado un solo DVD así que no es de sorprender que no tuviera instalada ninguna herramienta GUI en mi sistema. Después de años sin grabar un DVD tampoco recordaba las instrucciones para hacerlo así que probé con cdw, un programa con una interfaz gráfica pero en modo de consola. Desafortunadamente cdw me marcaba errores con el disco DVD-RW que intentaba utilizar 😦 , esto me hizo preguntarme, tal como me lo preguntaba hace años, ¿por qué una tarea tan básica como quemar un disco tiene que ser tan complicada en Linux? Tienes que pelear con el software porque ¡las herramientas hechas para una tarea específica fallan al intentar llevar a cabo esa tarea! ¡Esta es una de las razones por las que Linux nunca será apto para un usuario común y corriente!.

cdw-error

Por cierto, para borrar un DVD: wodim dev=/dev/sr0 blank=fast

En fin, tal parece que todas las herramientas GUI, ya sea gráficas o de consola, para quemar discos son terribles para esa tarea, no me quedaba más que usar la línea de comandos.

Grabar un DVD desde la línea de comandos es un proceso de dos pasos en Debian Stretch; primero debemos usar genisoimage para generar un archivo .iso que contenga los archivos que deseamos grabar. A continuación debemos grabar el archivo .iso al DVD usando una herramienta como wodim. Sí, sé que también escribí en el pasado un post sobre cómo instalar una versión actual de cdrtools pero esta vez no valía la pena hacer todo eso para grabar un simple DVD.

Para generar una estructura compleja de directorios con genisoimage es necesario usar la opción -graft-points, tal como lo indica la documentación, pero para grabar simplemente unos cuantos archivos al DVD podemos usar algo como:

monstruosoft@debian:~$ genisoimage -v -J -r -V ETIQUETA -o file.iso archivo1.txt archivo2.jpg
monstruosoft@debian:~$ wodim -v dev=/dev/sr0 -dao file.iso

El ejemplo anterior generará con genisoimage un archivo .iso que contiene los archivos archivo1.txt y archivo2.jpg y a continuación grabará el DVD usando wodim. Así que, básicamente, es necesario crear un archivo .iso temporal, lo que significa que si quieres grabar un DVD de 4 GBs necesitas generar en tu disco duro un archivo temporal de 4 GBs, eso apesta, ¿cierto?. Bueno, aquí es donde las pipes entran al rescate; es posible enviar la salida de genisoimage directamente a wodim ya sea usando una pipe:

monstruosoft@debian:~$ genisoimage -v -J -r -V ETIQUETA archivo1.txt archivo2.jpg | wodim -v dev=/dev/sr0 -tao -

o una named pipe:

monstruosoft@debian:~$ mkfifo my_pipe
monstruosoft@debian:~$ genisoimage -v -J -r -V ETIQUETA -o my_pipe archivo1.txt archivo2.jpg
monstruosoft@debian:~$ wodim -v dev=/dev/sr0 -tao my_pipe

Si obtienes un error al utilizar wodim junto con una pipe o named pipe es posible que necesites especificar el tamaño del archivo .iso con anticipación. Puedes obtener un cálculo del tamaño del archivo .iso que generará genisoimage usando el siguiente comando:

monstruosoft@debian:~$ genisoimage -R -q -print-size archivo1.txt archivo2.jpg
40296

El número que imprime el comando anterior es el tamaño en sectores de la imagen .iso que generará genisoimage para los archivos especificados. Conociendo con anticipación el tamaño del archivo .iso es posible usar la opción -dao de wodim usando una pipe o named pipe, por ejemplo:

monstruosoft@debian:~$ genisoimage -v -J -r -V ETIQUETA -o my_pipe archivo1.txt archivo2.jpg
monstruosoft@debian:~$ wodim -v dev=/dev/sr0 -dao -tsize 40296s my_pipe

Nota la s al final del valor del argumento -tsize, ésta indica que el valor está en sectores y no en bytes.

OpenJPEG

En el post anterior hablaba de cómo las imágenes JPEG2000 no tienen mucho soporte en visores de comics para Linux así que me hizo preguntarme, si quisiera escribir mi propio visor de comics con soporte para imágenes .jp2, ¿qué librería podría usar?.

Read More

Abrir imágenes JPEG2000 en Debian

Hace poco encontré un par de galerías de imágenes para descargar desde la página de archive.org y pensé en aprovechar la opción de descargarlas en formato JPEG2000 ya que la calidad es comparable al original en formato CBZ pero el tamaño de la descarga es típicamente mucho menor (cerca del 50%) y, cuando tienes el internet del perrito de apenas 3 Mbps, los archivos de menor tamaño siempre son una buena opción. Así que descargué algunos archivos .zip que contenían las imágenes en formato .jp2. No debería haber mucho problema, ¿cierto?. Cualquier visor de comics puede abrir archivos .cbz que son básicamente archivos .zip con una extensión diferente. El problema, sin embargo, fueron los archivos .jp2.

Read More

Desaventuras en la tierra de Linux, parte 14

En días recientes me he topado con un par de esas cosas que me hacen darme cuenta por qué Linux nunca será popular entre los usuarios comunes y corrientes. Básicamente, en mi opinión, Linux nunca será de utilidad para el usuario promedio mientras no cuente con buenas alternativas a programas que existen en Windows; y no hablo de alternativas gratuitas a programas de paga, hablo de alternativas a programas gratuitos de Windows.

Ya he hablado del primer y principal obstáculo al que se enfrenta un usuario promedio al intentar probar Linux, la detección de hardware. Si tienes suerte de que el instalador de tu distro de Linux detecte todo tu hardware, ya estás del otro lado; si eres un usuario promedio y no tienes suerte con la detección de hardware, este es el fin de la aventura en la tierra de Linux, la mayoría de los usuarios no pasará de aquí si su hardware no es detectado ya que la mayoría no tiene el tiempo, los conocimientos o el interés de pasar horas y horas buscando una solución.

El problema es que aún si eres de los que tienen suerte con la detección de hardware, el software en Linux es otro de los grandes problemas que alejan a los usuarios promedio. Ya en otras ocasiones hablé de ImgBurn y foobar2000 y la falta de una buena alternativa para Linux. En este post toca el turno a LibreOffice y los editores de video para Linux.

Read More

En corto No. 9 – Filtros en FFmpeg

Acabo de pasar la última hora tratando de entender por qué mi script de FFmpeg no funcionaba para aplicar dos o más filtros simultáneamente. Resulta que estaba usando mal la línea de comandos al usar algo como:

monstruosoft@debian:~$ ffmpeg -i mi_video.mp4 -vf crop=640:480:115:225 -vf setdar=16/9 salida.mp4

La segunda versión del argumento -vf estaba sobreescribiendo el filtro definido anteriormente. Los filtros deben especificarse en una sola aparición del argumento -vf separados por comas. Así que la versión correcta del comando anterior es la siguiente:

monstruosoft@debian:~$ ffmpeg -i mi_video.mp4 -vf crop=640:480:115:225,setdar=16/9 salida.mp4

Hay que tener esto en mente cuando quieras aplicar múltiples filtros con FFmpeg, de lo contrario, este es el tipo de cosas sencillas que suelen hacerte perder horas 😛 .

 

Ripear un DVD con FFmpeg usando named pipes, parte 2

En el post anterior usamos named pipes para ripear un DVD pero tal vez te estés preguntando por qué es necesario abrir dos ventanas de terminal. En realidad esa es sólo una forma de hacerlo. Verás, la consola de Linux es una caja de sorpresas. Si quieres ripear un DVD con el método descrito en los posts anteriores pero usando una sola ventana de terminal, puedes hacerlo de la siguiente manera.

Read More

Ripear un DVD con FFmpeg usando named pipes

En el post anterior escribí las instrucciones para ripear un DVD usando FFmpeg y este es el ejemplo perfecto para hablar sobre las named pipes de Linux. Las named pipes nos permiten enviar datos de una aplicación a otra. Muy probablemente has visto antes el carácter de pipe en Linux (‘|’) que cumple el mimso objetivo pero que en algunos casos puede ser difícil de usar si una de las aplicaciones no soporta entrada desde stdin, por ejemplo. Las named pipes pueden facilitar enviar datos de una aplicación a otra gracias a que las puedes usar simplemente como un archivo más, es decir, envías la salida de un programa a un archivo de tipo pipe y después usas ese archivo como la entrada para el otro programa.

Read More