Cómo usar el comando VHS para convertir una sesión de terminal Linux en un GIF hermoso y compacto

¿Alguna vez has conocido esos GIF que animan la diámetro de comando y te has preguntado cómo se ven tan correctamente? ¿O viste un GIF pequeño y te preguntaste cómo es que son tan pequeños? No es tan difícil como crees y soluciono los dos con dos comandos fáciles de usar.

VHS es un comando para originar GIF a partir de un archivo de script, y gifsicle es un comando para editarlos. Cuando se usan juntos, pueden crear GIF muy compactos y de aspecto profesional. Cubro qué es VHS, cómo usarlo y cómo comprimir el GIF resultante para que sea casi nada más holgado que un archivo PNG peculiar.

Una demostración de VHS

Dicen que una imagen vale más que mil palabras, así que aquí tienes una que es textualmente cierta en este caso:

Una ventana de terminal muestra al usuario buscando un archivo de texto usando los comandos cat y FZF. Primero, el usuario usa el comando cat para mostrar que hay mucho texto en el archivo de texto. Luego, el usuario canaliza el contenido del archivo al comando FZF, que abre una ventana FZF. Luego, el usuario escribe una palabra y FZF acota el resultado de la búsqueda en tiempo real.

Esa animación fue para un artículo que escribí sobre fzf. Aquí hay otra imagen del mismo artículo:

Un usuario elige un comando de una lista de comandos usando FZF. Cuando se abre la ventana FZF, el usuario escribe muu y FZF reduce la lista de comandos a un solo comando cowsay que dice muu. Luego el usuario lo ejecuta.

Se ven hermosos, ¿no? Lo creas o no, no fue difícil ni demasiado técnico, ni resultó en una imagen holgado y voluminosa. De hecho, la primera imagen tiene solo 223 KB de tamaño y la segunda es aún más pequeña con 22 KB. Entonces, ¿cómo lo hice? Con VHS, Gifsicle y un poco de brujería.

Conceptos secreto de VHS explicados

El concepto central detrás de VHS es el archivo de cinta: una secuencia de comandos escritos que simula una sesión de terminal. He aquí un ejemplo sencillo:

Output output.gif

Type 'ls -al' Enter
Sleep 2s

Esta cinta en particular hace tres cosas:

  1. Especifica un archivo GIF de “salida”.

  2. Simula escribir un comando (“Tipo”) y luego presionar “Entrar”.

  3. “Duerme” durante 2 segundos para permitir que el leedor procese las acciones.

Cuando ejecute esta cinta, verá el comando escrito en la terminal y ejecutado. La animación se repetirá posteriormente de una breve pausa.

Genera el archivo GIF ejecutando vhs mi-archivo.cinta en tu terminal.

Una ventana de terminal muestra el resultado del comando VHS. Muestra una repetición del guión en forma de texto y un mensaje que indica que se ha generado el gif.

El GIF resultante:

Un gif animado muestra la ejecución del comando LS en una ventana de terminal.-anim

Ahora escribamos una cinta.

Ahora escribamos un ejemplo más complicado y centrémonos en algunos detalles.

Comprender el archivo de cinta

El venidero archivo de cinta creará el GIF “jeringuilla en un pajar” conocido anteriormente. Aclararé lo que significa cada diámetro a continuación.

Output unoptimized.gif

Require fzf

Set FontSize 32
Set Width 1200
Set Height 675
Set TypingSpeed 0.15
Set Shell "zsh"
Set Framerate 5

Hide
Type 'eval "$(fzf --zsh)"' Enter
Type 'clear' Enter
Show

Type 'cat lorem.txt'
Sleep 1
Enter
Sleep 2s

Type 'cat lorem.txt | fzf'
Sleep 1
Enter
Sleep 0.5

Type "needle"
Sleep 1
Enter
Sleep 3s

La directiva “Requerir” garantiza que “fzf” esté presente en su sistema antiguamente de continuar.

La directiva “Salida” no necesita explicación, pero sepa que puede renderizar en un GIF, MP4, WebM o un directorio de fotogramas individuales para procesarlos por separado.

Las directivas “Set” deben especificarse a continuación, cerca de la parte superior del archivo de cinta. Aplican varias opciones, como “Orondo”, “Suspensión”, “Shell”, “Framerate” e incluso “TypingSpeed”. Estas opciones se explican por sí solas. Puede cambiar la velocidad de escritura en cualquier parte del archivo de cinta, pero debe especificar todas las demás opciones en la parte superior.

He configurado deliberadamente la velocidad de fotogramas víctima para achicar el tamaño de la imagen, pero a veces puede causar problemas de renderizado. Si ese es el caso, aumente la “Framerate” o elimine la directiva por completo.

La sección “Ocultar” es la venidero, y aquí es donde configuramos el script. Agregamos aquí cualquier comando que no queremos que se represente. En este ejemplo, configuramos el entorno fzf y limpiamos el terminal para eliminar cualquier mensaje no deseado de su evaluación de shell. Terminamos la sección “Ocultar” con una directiva “Mostrar”, que le dice a VHS que grabe lo que sigue.

La diámetro 17 es donde comienza la representación visual. Primero, sondeo un archivo que está ahíto de texto de Lorem Ipsum; este es el pajar en el que buscaremos con fzf. El grímpola “duerme” a menudo porque hace que la animación se vea mejor.

En la diámetro 22, volvemos a capturar el archivo de texto, lo canalizamos a fzf, presionamos la tecla Enter y, en la diámetro 22, finalmente escribimos el término de búsqueda: jeringuilla. Finalizamos el script con un liberal “Sueño” para darle tiempo al becario a procesar la imagen.

El comando completo debe capturar un archivo de texto para mostrar su contenido, luego capturarlo nuevamente y buscarlo usando fzf.

Crear el archivo de cinta

Antaño de originar un GIF a partir de su archivo de cinta, asegúrese de deber instalado fzf. Incluso necesitas crear un archivo de texto lorem ipsum, así que ejecuta el venidero comando:

{
  echo -e "You can use fzf to find a needle in a haystack.n";
  curl 'https://pastebin.com/raw/nRc62E07';
} > lorem.txt

Ahora, cree un archivo de cinta llamado fzf-demo.tape, ingrese el contenido del archivo de cinta y ejecute el venidero comando para originar el GIF:

vhs fzf-demo.tape

Ese comando producirá un GIF llamado “unoptimized.gif”, que comprimiremos en la venidero sección.

Comprimir el GIF

El “.gif no optimizado” que creamos tiene un tamaño de rodeando de 1,2 MB, que suele ser demasiado holgado. Podemos comprimirlo con un comando llamado Gifsicle. Puedes instalarlo con los siguientes comandos:

Para Fedora, ejecute el venidero comando:

sudo dnf install gifsicle

Para Debian, ejecute el venidero comando:

sudo apt install gifsicle

Para Arch Linux, ejecute el venidero comando:

sudo pacman -S gifsicle

Ahora que tienes Gifsicle instalado, puedes comprimir el archivo “unoptimized.gif” con el venidero comando:

gifsicle -O3 --colors 8 unoptimized.gif -o optimized.gif

Eso comprimirá el GIF a aproximadamente 228 KB.

En ocupación de utilizar una paleta de colores completa, opté por ocho bits. Adicionalmente de la reducción de la resolución, achicar la cantidad de colores es el veterano peculio de espacio. Si su sesión de terminal contiene una amplia abanico de colores que desea conservar, configúrelo en un valía más stop, hasta 256, pero prepárese para un archivo significativamente más holgado.

Otra forma de achicar el tamaño de la imagen es achicar la velocidad de fotogramas. Lo configuré en 5, lo que parece ser un buen nivelación entre compacidad y legibilidad. Correcto a que la velocidad de fotogramas es tan víctima, el GIF de salida contendrá fotogramas duplicados, pero podemos eliminarlos automáticamente. Cuando se utiliza la bandera “-O3” (o -O2) con Gifsicle, encontrará los fotogramas duplicados, eliminará los extras y agregará un retraso apropiado al fotograma restante.

Si compara estas dos imágenes de antiguamente y posteriormente, puede ver que una imagen tiene muchos menos fotogramas y el retraso entre cada fotograma ha cambiado a una velocidad variable: esa es la imagen optimizada.

Para GIF llenos de bono (por ejemplo, texto que cambia rápidamente), eliminar fotogramas duplicados tiene un impacto significativo en el tamaño del archivo. Para animaciones más pequeñas y sencillas, el espacio ahorrado es proporcionalmente beocio pero sigue siendo considerable.

No lo mencioné antiguamente, pero VHS tiene un comando de disco que creará automáticamente una cinta a partir de las acciones de su terminal. Se aplazamiento que edites la cinta posteriormente. Ejecutar registro vhs > mi.cintarealiza tus acciones y luego escribe salida en tu caparazón cuando hayas terminado. Parece que saldrás de tu caparazón, pero no lo harás; VHS creará un archivo de cinta para usted.


Le recomendaría que lea usted mismo la documentación oficial (que se encuentra en su página de GitHub). Comprenda que VHS no es valentísimo y que puede deber errores. Sin incautación, funciona la veterano parte del tiempo y requiere mucho menos trabajo que la disco de pantalla. ¿No lo crees? Pruebe la función “registrar”, edite el archivo de cinta y ejecute los dos comandos necesarios.

Related Posts

Star Wars obtuvo el diseño del X-Wing mientras su creador estaba en un pub sajón

El X-wing es uno de los vehículos más reconocibles en la historia de la ciencia ficción. Algunos podrían argumentar que el Intransigente Milenario es…

Cómo reemplacé Audible con una alternativa autohospedada

Si eres como yo, entonces es muy posible que estés cansado de abonar por Audible solo para escuchar tus audiolibros. Sin incautación, encontré una mejor forma de disfrutar mis audiolibros…

You Missed

Subrayan papel de la ciencia y rol estatal en atención autismo | AlMomento.net

Subrayan papel de la ciencia y rol estatal en atención autismo | AlMomento.net

PCT tilda imperialista-sionista la acometida de EEUU e Israel a Irán | AlMomento.net

PCT tilda imperialista-sionista la acometida de EEUU e Israel a Irán | AlMomento.net

Mayoría de homicidios en RD son por conflictos sociales

Mayoría de homicidios en RD son por conflictos sociales

¡Cuidado con los pequeños detalles!

¡Cuidado con los pequeños detalles!

Comienza la Semana Más Corta en la PUCMM

Comienza la Semana Más Corta en la PUCMM

Martha Heredia experimenta cambio radical en su vida, ve su futuro primoroso en el merengue

Martha Heredia experimenta cambio radical en su vida, ve su futuro primoroso en el merengue