Cambiar el tamaño de los videos por lotes con el recorte "pan y scan"

8

Estoy tratando de preparar una colección de ~ 120 videoclips para reproducirlos en VLC Player y proyectarlos en un proyector de baja resolución (1024x768) durante un evento de música electrónica DIY. Los clips fuente son todos visuales abstractos de súper alta resolución en formato .mov, de aproximadamente 4 GB cada uno. Son de varias relaciones de aspecto. Algunos son 4: 3, otros son 16: 9, otros son 1: 1 (cuadrado), etc.

Me gustaría recortar / escalar todos los clips a 1024x768 mientras mantengo sus respectivas relaciones de aspecto originales. Y me gustaría hacerlo sin escribirlos en letras y dejar barras negras en la parte superior / inferior o izquierda / derecha. Básicamente, lo que me gustaría hacer es reducirlos al punto en que llenen por completo la pantalla de 1024x768, y no más pequeños. ¿Creo que es esencialmente una técnica de "panorámica y exploración"?

(No importa si parte de la imagen se elimina en el proceso, solo están girando formas geométricas y demás).

¿Hay alguna manera de cambiar el tamaño de ~ 120 videos en lote usando un solo comando FFMPEG? ¿O hay otra herramienta para Windows o Linux que funcione? Realmente no me importa qué formato de salida, solo algo que VLC puede reproducir sin agitarse.

Derrick Miller
fuente

Respuestas:

3

Si solo tuviera videos de 4: 3 y 16: 9, sugeriría:

ffmpeg -i input.mov -filter:v 'scale=-1:768,crop=1024:ih' \
-c:v libx264 -crf 23 -preset veryfast output.mp4

Eso escalaría un video a una altura de 768, ajustando el ancho para mantener la relación de aspecto; y luego recorta el ancho a 1024, manteniendo la altura en 768. El hecho de que esté usando videos 1: 1 también complica las cosas: un video de 3000x3000 se escalará a 768x768, y luego ffmpeg intentará recortarlo a 1024x768, que obviamente no funcionaría, ya que los cultivos no pueden ser más grandes que la entrada ...

La única forma en que puedo pensar en hacer que esto funcione es recortar todos los videos, lo cual usted dijo que no sería un problema. Esto recortará el ancho de salida para que sea igual a la altura de entrada, y la altura de salida sea 3/4 de la altura de entrada; y luego reducirá la escala del video a una altura de 768, manteniendo la relación de aspecto con el ancho:

ffmpeg -i input.mov -filter:v 'crop=ih:3/4*ih,scale=-1:768' \
-c:v libx264 -crf 23 -preset veryfast output.mp4

Esto solo funcionará si los archivos originales tienen una altura de 1024 o más. Tenga en cuenta que x264 solo acepta un ancho o alto uniforme, lo que puede causar problemas (pero no debería en este caso).

Para convertir cada .mov en un directorio, puede usar un bucle for:

for f in *.mov; \
do ffmpeg -i "$f" -filter:v 'crop=ih:3/4*ih,scale=-1:768' \
-c:v libx264 -crf 23 -preset veryfast "${f/%mov/mp4}"; \
done

Para hacerlo de forma recursiva, puede usar find:

find . -type f -name *.mov -exec bash -c \
'ffmpeg -i "$0" -filter:v "crop=ih:3/4*ih,scale=-1:768" \
-c:v libx264 -crf 23 -preset veryfast "${0/%mov/mp4}"' {} \;

Todo esto requerirá una versión reciente de ffmpeg.

maldad
fuente