Reparaciones hechas

domingo, 25 de febrero de 2024

Convertir AVI a MP4 y comprimir videos MKV usando ffmpeg

Después de hacer un video en AVI de una simulación hecha desde un software de diseño CAD, me encontré con un video de más de 3GB pero solo duraba un minuto, así que para poder compartirlo con alguien más debía comprimirlo, de allí nació la necesidad por aprender a usar una herramienta gratuita pero poderosa, llamada ffmpeg. 

Adelanto que paso a ser un video de 3Gb a 3Mb, debido a que las imágenes en AVI no estaban comprimidas, era una secuencia de imágenes crudas, al usar correctamente ffmpeg se logró comprimir casi en un 1000%, pero no siempre es así, en el caso de mis clases de la universidad grabadas con OBS, los archivos MKV alcanzaban alrededor de una 1Gb por hora, y se logró comprimir hasta 250Mb, lo que representa un ahorro en espacio de un 75%

En este blog no voy a explicar como instalar ffmpeg, de eso hay bastante en internet y depende de que sistema operativo uses, hasta ahora sé que funciona en linux y windows, yo lo he usado en ambos. Por ahora solo voy a explicar el uso que he aprendido a darle a esta herramienta, la cual es muy practica para ahorrar espacio en el disco duro.

Lo primero que debo aclarar es que en este tema se usan dos términos, los cuales son Contenedores y Codificación, así que una cosa es querer cambiar el contenedor del archivo y otra cosa es querer codificarlo. Un ejemplo es querer pasar un video de un contenedor MKV a un contenedor MP4, pero manteniendo la codificación del audio y el video, y otra cosa es querer codificar el video y/o el audio de forma que tenga otro formato, ya sea para cambiar la resolución, la calidad, los bitrates, el tamaño del archivo, etc.

En mi caso, quería hacer las dos cosas, cambiar el contenedor a MP4 que se puede compartir y reproducir muy fácilmente casi que en cualquier dispositivo, y también quería codificar el video para que el tamaño del archivo se redujera. El audio realmente no me interesa modificarlo, por lo que simplemente en los parámetros usados, solo se le indica que copie el audio al nuevo contenedor sin codificarlo.

Este es el código usado para comprimir un archivo AVI que contenía un video con secuencia de imágenes crudas (video entregado por una simulación de Autodesk Inventor) :

ffmpeg -i "ENSAMBLE CLOSET222.AVI" -c:v libx264 -preset slow -crf 22 -c:a copy "CLOSETLILI.MP4"

Antes de usar este código, obviamente debes haber instalado ffmpeg, y para usarlo debes usar la consola de windows 'Simbolo del sistema', si no sabes como usarlo, intentare dejar un paso a paso.

Presiona en el teclado al mismo tiempo, la tecla Windows y la tecla R, para abrir la ventana Ejecutar

Escribe CMD y presiona ENTER en el teclado

Una vez se abre la ventana de 'Simbolo de sistemas' deberás navegar hasta la carpeta donde tengas los videos grabados, por lo que debes saber como cambiar de unidad y o de carpetas en esta ventana, para los que no lo sepan, generalmente se usa el comando cd que significa (change dir)

De esta manera, si mis archivos están en una carpeta llamada D:\MKV  deberé primero revisar si estoy en la unidad D, si no lo estoy simplemente escribo D: y ENTER

Y luego utilizar CD MKV

O podría simplemente escribir cd D:\MKV

En la ventana, deberia aparecer a margen izquierdo la ruta deseada.

Una vez asegurado esto, se procede a escribir el comando deseado.


Voy explicar que significa cada parámetro del comando escrito:

ffmpeg -i "ENSAMBLE CLOSET222.AVI" -c:v libx264 -preset slow -crf 22 -c:a copy "CLOSETLILI.MP4"


ffmpeg es el comando

-i    significa que vamos a indicar el archivo de entrada

"ENSAMBLE CLOSET222.AVI"    es el archivo de entrada que quiero leer

-c:v     significa que vienen los parámetros para indicarle como codificar el video

libx264    es el codificador que se va a utilizar, en este caso para H264

-preset    indica que vamos a utilizar una plantilla que ffmpeg ya tiene configurada

slow     indica que vamos a hacerlo lento, que es una plantilla que se demora un poco pero tiene muy buenos resultados de compresión

-crf 22     indica que vamos a usar una tasa de control constante en un valor de 22, es una calidad medio bueno, donde 0 sería para una calidad sin perdidas y 51 es la peor calidad posible)

-c:a    significa que vienen los parámetros para indicarle como codificar el audio

copy     significa que no vamos a codificar, es decir solo vamos a copiar, en este caso el audio

"CLOSETLILI.MP4"    es el nombre que le he dado al archivo de salida, es decir donde va a guardar el video que resulta de la ejecución del comando completo


El siguiente codigo es para convertir MKV a MP4, cambiando el contenedor de MKV a MP4 pero tambien codificando el video, es basicamente lo mismo que el codigo anterior, solo que la extensión del archivo de entrada dice .mkv :


ffmpeg -i "2021-10-20 19-37-52.mkv" -c:v libx264 -preset slow -crf 22 -c:a copy "2021-10-20 19-37-52.mp4"


Variacion del codigo anterior para cuando se sabe que el video es de una presentación, de una clase o algo donde las imágenes del video no tienen mucho movimiento:


ffmpeg -i "2021-11-05 19-40-41.mkv" -c:v libx264 -preset slow -tune stillimage -crf 22 -c:a copy "2021-11-05 19-40-41.mp4"


Este código permitirá comprimir todos los videos de una carpeta, es decir todos los archivos MKV de la carpeta, y generara los nuevos archivos mp4 en la misma carpeta:

FOR /F "usebackq delims=|" %F IN (`dir /s /b /A:-D "*.mkv"`) DO ffmpeg -i "%F" -c:v libx264 -preset slow -tune stillimage -crf 22 -c:a copy  "%~nF.mp4"


Fuentes:

https://trac.ffmpeg.org/wiki/Encode/H.264

https://ottverse.com/ffmpeg-convert-avi-to-mp4-lossless/

https://shotstack.io/learn/ffmpeg-batch-convert/





No hay comentarios:

Publicar un comentario