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
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
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.
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-”.
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
admin
January 25, 2020
codigo
No Comment