Obtener, cambiar la resolución de un archivo de video y automatizar con ffmpeg

admin

January 25, 2020

codigo

No Comment

Obtener la resolución de un archivo de video

Para saber que resolución tiene nuestro archivo de video, utilizaremos el siguiente comando:

    ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 archivo.mp4

ffprobe es un archivo ejecutable parte de la suite de ffmpeg. El comando toma nuesto archivo como entrada y obtiene su ancho y altura. Nos lo muestra en el formato AnchoxAlto, ejemplo:

 1920x1080

Generar un comando máscara para obtener la resolución

Podemos hacer un archivo ejecutable que reciba simplemente el nombre de nuestro archivo y nos devuelva la resolución del mismo, simplemente creamos un archivo llamado ffgetres.sh y escribimos:

 #!/bin/sh
 ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 $1

Guardamos y listo, podemos llamar a nuestro archivo de la siguiente forma:

ffgetres miarchivo.mp4

Y nos dará por resultado:

1920×1080

Cómo cambiar la resolución a un archivo de video

Para cambiarle la resolución a un archivo de video, utilizando el excelente programa ffmpeg, usamos el siguiente comando:

ffmpeg -i archivo_original.mp4 -vf scale=1920:1080 archivo_modificado.mp4

Cómo podemos ver, es bastante sencillo, solamente necesitamos especificar nuestro video de entrada, un parámetro de video, la escala a la que deseamos el archivo de salida, y el nombre del mismo.

Generando un comando máscara para cambiar la resolución de un archivo de video

Vamos a hacer un pequeño programa para facilitar un poco las cosas. A este programa le enviaremos el nombre del archivo que deseamos modificar, el ancho y el alto que deseamos y nos generará un nuevo archivo, de nombre scaled-{nombre del archivo original}.

Para hacer esto, simplemente creamos un archivo llamado ffscale y escribimos:

# Obtenemos el nombre del archivo a modificar del primer parámetro
file=$1
# Obtenemos el ancho del segundo parámetro
width=$2
# Obtenemos la altura del tercer parámetro
height=$3
# Mandamos llamar ffmpeg con el comando, sustituyendo los valores
ffmpeg -i $file -vf scale=$width:$height scaled-$file

Y listo! ffmpeg generará un nuevo archivo con la resolución deseada, en la misma carpeta donde se encuentr el archivo original, solo que con el prefijo “scaled-”.

Automatizando el ajuste de resolución de videos de una carpeta

Ahora, utilizando estos pequeños programas que acabamos de escribir, podemos hacer un script para que ajuste todos los archivos mp4 que tengamos en una carpeta, algo bastante útil si trabajamos con video y vamos a estar combinandolos para formar composiciones más complejas, que tengan la misma resolución es un requisito.

Para hacer esto, creamos un archivo de nombre adjust-resolution.sh y tecleamos:

#!/bin/sh

# Recorremos los archivos de video en la carpeta actual
for filename in *.mp4; do
  # La variable $filename será el nombre de cada archivo
  # Obtenemos la resolución
  res=$(ffgetres $filename)
  # La variable $res será la resolución del archivo $filename
  # Mostramos la resolución del archivo
  echo "$filename, Resolution: $res";

  # Si la resolución es diferente a la deseada
  if [ "$res" != "1920x1080" ]; then

    # Anunciamos la escalación del archivo
    echo "Scaling $filename to 1920x1080";
    # Escalamos el archivo, con nuestra recién creada máscara
    ffscale $filename 1920 1080
	# Al terminar, informamos al usuario
    echo "File $filename is scaled"
    # Vamos a borrar el original y a renombrar el nuevo
    echo "Overriding original $file"
    # Borramos original
    rm $filename
    # Renombramos el nuevo
    mv scaled-$filename $filename
    # Anunciamos el cambio
    echo "$filename is 1920x1080"
  fi;
done

echo "Donezo!";

Y eso es todo, podemos ejecutar con el comando:

./adjust-resolution.sh

El resultado será una lista archivos con sus resoluciones. En el caso de que un archivo no tenga la resolución deseada, se realizará en ese momento el cambio, luego se continuará con el siguiente archivo mp4.

archivo1.mp4, Resolution: 1920×1080
archivo1.mp4, Resolution: 1920×1080
archivo1.mp4, Resolution: 1920×1080
archivo1.mp4, Resolution: 1920×1080

¡Sensacional! ¿Cierto? Espero les sirva de mucho, y no se olviden, si quieren aprender bien bien de ffmpeg, visiten su documentación: https://ffmpeg.org/documentation.html

Related Posts

#TiposNotacionMayusculas

admin

March 31, 2017

codigo

No Comment

Son tres principales, PascalCase, camelCase y snake_case. Pascal y camel pueden verse bien juntos en algunos lenguajes, pero no los mezcles con snake_case, si vas a usar snake_case, que sea el único estilo en el código 🙂

Read More

Leave a Reply

Your email address will not be published. Required fields are marked *