Clic aquí para poner guiones al final de línea. | Click aquí para modo nocturno |
Seguro tienes vídeos que has grabado con tu teléfono celular. El problema: a menos que tu móvil sea de gama alta, seguro tienen demasiado movimiento y “pesan” demasiado, es decir, ocupan mucho espacio. En este vídeo te compartiré una sencilla herramienta para comprimirlos desde el propio celular Android.
Aquí está el programa: stabilize.sh. Consiste sólo en una lista de instrucciones que, primero, estabiliza el vídeo (en dos pasos) y luego lo comprime para que ocupe menos espacio, sin perder demasiada calidad.
Está diseñado para ser ejecutado en sistemas Linux y también Android. Seguro con poco esfuerzo podrá alguien adaptarlo a Windows, incluso añadiéndole una interfaz gráfica si se desea.
A continuación una breve explicación de cómo funciona este script.
Al filmar un vídeo probablemente se grabe en formato .mp4; por eso el script lo da por supuesto y no es necesario añadir la terminación .mp4 al indicar el nombre de archivo.
A continuación puedes indicar los “cuadros por segundo”, o fps, frames per second; normalmente los teléfonos graban a 30 cuadros por segundo, pero si el vídeo no requiere demasiado detalle al movimiento ―por ejemplo, si no es tanto “acción” sino tú hablando―, puedes reducírsela a 24 fps, que es el framerate empleada por las películas en el cine; se verá bien igual.
No es necesario indicar los fps; puedes dejar en blanco y mantendrá el framerate del archivo original.
Tu sistema Linux (o Android con Termux) deberá tener instalado el comando ffmpeg; en ciertas versiones de Linux (como la mía) ffmpeg no viene incluido con el filtro vidstab que es el que se usa para estabilizar el vídeo; así que puedes descargarte una versión de ffmpeg sin instalar (static build) para ejecutar desde la terminal, desde aquí; esa versión sí tiene el filtro necesario.
Descárgala, descomprímela en carpeta Downloads y cámbiale el nombre a la carpeta simplemente a “ffmpeg” para que el programa la encuentre. Esto, sólo si tu versión de Linux no incluye el filtro vidstab
; la versión de ffmpeg
en Termux sí la tiene, así que si lo vas a usar en el móvil, deberás remover en los comandos del script la parte donde dice ~/Downloads/ffmpeg/./
pues no será necesario.
El script puedes ejecutarlo directamente con el comando bash stabilize
y a continuación el nombre del archivo (sin .mp4) y, opcionalmente, indicar un menor fps.
Si deseas que se ejecute automáticamente, cópialo en el directorio bin
de la carpeta home
de tu instalación de Linux; si no existe, créala, quítale la terminación .sh
y dale permisos de ejecutable.
Si quieres volverlo un comando más de Termux, sigue las instrucciones del vídeo.
Dependiendo de la extensión del vídeo, el proceso de estabilización y compresión será bastante largo. Estamos hablando de algo así como diez veces más largo que la duración del vídeo original. Por eso usamos el comando nice
para indicarle al sistema baja prioridad en esta tarea, de tal manera que tu PC, laptop o móvil no se vuelva demasiado lento o se sobrecaliente mientras realiza esas tareas, y puedas navegar o utilizar otra aplicación.
Pero ten en cuenta que aplicaciones intensivas en procesamiento ―como ver vídeos o jugar― sí se verán afectadas por el comando; mas navegación normal, lectura o usar un procesador de texto, no tanto.
Los filtros vidstabdetect
y vidstabtransform
tienen varias opciones que puedes modificar según el tipo de vídeo. Aquí he puesto las opciones default. Si tienes tiempo y ganas, puedes revisarlas en detalle.
En el proceso intermedio de estabilizarlo, creamos un vídeo temporal de 6 Mbit de transferencia por segundo; eso será suficiente para un vídeo de 1080p de resolución. Ese vídeo será eliminado luego de ser comprimido en formato .webm VP9.
Elegí ese formato porque es de código abierto, disponible en todos los navegadores y permite reducir el tamaño de los archivos hasta la mitad de un archivo tradicional .mp4 H.264, manteniendo calidad similar.
El nuevo codec H.265 .mp4, también llamado HEVC, alcanza cotas de compresión ligeramente mayores al VP9, pero no es de código abierto, ni está disponible en navegadores.
El nuevo codec AV1 lamentablemente no se encuentra disponible en ffmpeg
, ni siquiera en la versión static que indiqué; así que nos mantendremos con el VP9 hasta mientras.
El teléfono de gama media-baja que uso (Redmi 9) graba vídeo en 1080p a 30 fps, que como mencionamos es tanta resolución como la de una pantalla de cine; así que debería bastarnos también para registrar nuestros recuerdos familiares y volverlos a disfrutar en el móvil, una laptop o incluso una pantalla de TV de las actuales.
Este teléfono filma 1080p en un bitrate de alrededor de 20Mbit/s; es decir, ¡más de 2MB por segundo! Indudablemente es demasiado. Incluso teléfonos de gama baja filman con calidad baja, pero altos bitrates. Fácilmente llenarán el almacenamiento del teléfono.
Luego de varios ensayos y errores, he llegado a la conclusión que el mínimo bitrate (tasa de transferencia de datos) para mantener un tamaño pequeño mientras se conserva la calidad, es de unos 3Mbit por segundo, que es el parámetro que he establecido en el último comando ffmpeg
al final del programa.
Puse un límite inferior de 2600kbit/s por si tu vídeo no tiene demasiado movimiento ―por ejemplo, si te filmas hablando frente a la cámara estática en un trípode o soporte― y un máximo de 3500 kb/s por si tu vídeo tiene más movimiento.
Esto es por supuesto lo mínimo en los ensayos que he hecho con vídeos de ratio 1:1; si usas vídeos en la resolución más común de 16:9, probablemente necesites incrementar estos valores, por ejemplo poniendo bitrates mínimo-promedio-máximos de 4M-5M-6M, o lo que prefieras.
Si el vídeo que deseas comprimir tiene una resolución más baja ―por ejemplo, 720p― puedes usar mín-promedio-máx de 1500-2000-2500. En 480p, algo así como 700-1000-1500.
Asimismo ten en cuenta que si bajas a 24 fps ―suficiente para vídeos hablando frente a la cámara― lograrás reducir aún más el tamaño. Y el vídeo que adjunto, que consiste básicamente en capturas de pantalla a 24 fps, ¡logró 1M/s sin perder calidad perceptiblemente, manteniendo la alta resolución!
Para voz, en ensayos con archivos .mp3 he notado que si las canciones usan regularmente 128kbps, para la voz puedes reducirlo a la mitad, 64 kbps sin perder calidad perceptiblemente; el codec libopus
que usa VP9 permite bajar aún más a 48 kpbs sin perder mayor calidad. Menos que eso y la voz empezará a sonar como a través de un teléfono. Pero igual será suficiente para vídeos en los que sólo se habla; si usas música en tu mezcla, probablemente prefieras alrededor de 96 kbps para que se escuche bien.
Et voilà! Has logrado reducir el tamaño del vídeo quizá a menos de una quinta parte de tamaño del original. De esa manera puedes archivar tus recuerdos ocupando menos espacio.
Para vídeos de Odysee y Bitchute, que no ofrecen reencoding el video para tener varias resoluciones, recomiendo utilizar una resolución de 520p, la mitad de la alta resolución de 1080p; 520p es suficiente para las pantallas de los celulares modernos, donde hoy en día se consume la mayor parte de contenido. Dependiendo de tu vídeo y el framerate que emplees, podrás usar 1000k o menos incluso de bitrate promedio.