Procesando vídeos en la línea de comando
La utilidad ffmpeg
nos permite hacer unas cuantas viguerías desde la línea de comandos. Las posibilidades son ilimitadas, pero aquí os dejo algunas de las combinaciones que más utilizo
Eliminar el audio de input.mp4
y almacenar el resultado en output.mp4
ffmpeg -i input.mp4 -an output.mp4
Re-escalar el fichero input.mp4
a un tamaño predeterminado y almacenar el resultado en output.mp4
.
ffmpeg -i input.mp4 -s 360x18 output.mp4
Reducir el tamaño del fichero. Dependiendo del valor que utilicemos, la calidad se puede degradar bastante
ffmpeg -i input.mp4 -b:v 64k output.mp4
Generar un screencast desde la línea de comandos. Los parámetros que siguen a -i
indican las coordenadas de inicio en las que grabar en caso de que solo queramos grabar una parte de la pantalla.
ffmpeg -video_size 480x330 -framerate 25 -f x11grab -i :0.0+10,20 output.mp4
Esto es todo por hoy. Ya os iremos contando más trucos con ffmpeg
.
Bash menuda historia!
El interprete de comandos bash
guarda la historia de todos los comandos que introducimos y nos permite recuperarlos pulsando los cursores arriba y abajo. Pero además de eso, bash
ofrece otras combinaciones de teclas y comandos con los que ser más productivos con la historia de comandos.
CTRL+R : Reverser history search !! : Runs last issued command history : List history file history -c : Borra el fichero de history !39 : Runs entry 39 in command history !grep : Runs last grep command in command history ^t1^t2 : Substitutes t1 by t2 in previous commnd and runs it
So añadimos un espacio al cualquier comando, este se ejecutará normalmente, pero no se almacenará en la historia:
ls /etc (...) $ ls /bin (...) $ ls /sbin (...) $ history (...) 559 ls /etc 560 ls /bin 561 history
Este comportamiento está controlado por la variable de entorno HISTCONTROL
. Si queréis que se almacene todo en la historia, solo tenéis que borrarla.
Si queremos que bash
deje de grabar la historia podemos poner la variable HISTSIZE
a cero.
Recordad que si queréis estos cambios permanentes debéis añadirlos en vuestros ficheros .bash_profile
o .bashrc
, para que se apliquen en cada sesión.
Sacándole el máximo a date
El comando date
es super poderoso. Muchos solo lo usamos para saber que día es o para decirle al ordenador que día es... Si, esos que no tienen pila. Pero date
nos permite mucho más. Aquí os dejo algunos flags que he tenido que usar en más de una ocasión:
$ date +%W # Semana del año $ date +%j # Día del año $ date +%q # Trimestre del año $ date +%s # Unix Epoch $ date -d @1455632169 # Convierte Unix Epoch
El UNIX epoch es el 1 de enero de 1970 a las doce de la noche UTC. En la tabla de arriba Unix Epoch realmente indica segundos transcurridos desde el Unix Epoch.
Ejecutar binarios sin permisos de ejecución
El siguiente truco nos permite ejecutar un programa que no tenga permisos de ejecución aunque no tengamos privilegios para poder modificar esos permisos. El truco consiste en invocar directamente el enlazador dinámico, en lugar de dejar que sea el sistema quien lo haga... Así que si. Esto solo funciona con binarios estáticos.
Preparemos el entorno. Vamos a utilizar xeyes
como hacemos normalmente
$ cd /tmp $ cp /usr/bin/xeyes $ chmod -x xeyes $ ./xeyes bash: ./xeyes: Permission denied
Lo primero que debemos averiguar es que enlazador dinámico utiliza el binario. Normalmente es solo uno para un determinado sistema, pero mejor comprobarlo.
$ readelf -p .interp xeyes String dump of section '.interp': [ 0] /lib64/ld-linux-x86-64.so.2
Ahora solo tenemos que invocar el fichero a través del enlazador dinámico:
$ /lib64/ld-linux-x86-64.so.2 ./xeyes
O en un solo paso y teniendo en cuenta que el interprete es la primera cadena que aparece cuando ejecutamos strings
....
$ `strings ./xeyes | head -1` ./xeyesNos leemos en el próximo número con más trucos emocionantes y sorprendentes
■