image video ffmpeg thumbnails video-processing

image - Use ffmpeg para generar una miniatura de video sin ninguna distorsión



thumbnails video-processing (2)

Puede usar la opción force_original_aspect_ratio en el filtro de escala .

ffmpeg -ss 100 -i /tmp/video.mp4 -frames:v 1 -q:v 2 -vf "scale=200:100:force_original_aspect_ratio=increase,crop=200:100" image.jpg

Para obtener una miniatura de 200x100 de un video, hago ffmpeg -ss 100 -i /tmp/video.mp4 -frames:v 1 -s 200x100 image.jpg . Pero si el video de origen no tiene la misma relación de aspecto que 200x100 , la miniatura se distorsiona (ya sea estirada o aplastada, horizontal o verticalmente) y se ve mal.

¿Hay alguna manera de que ffmpeg pueda descubrir, por ejemplo, que un video de 500x200 es 500x200 demasiado ancho, y eliminar 50px de la derecha y 50px de la izquierda, lo que hace que el video sea 400x200 ? Y como 400x200 tiene la misma relación de aspecto que 200x100 , la miniatura no tendría distorsión.

Sé que hay otras herramientas que pueden hacer esto con las miniaturas generadas por ffmpeg , pero preferiría hacerlo dentro de ffmpeg y no tener que procesar las miniaturas de nuevo.


Si el tamaño de tu miniatura es 200x100 fijo, ejecuta

ffmpeg -ss 100 -i /tmp/video.mp4 -vf "scale=''if(gt(dar,200/100),100*dar,200)'':''if(gt(dar,200/100),100,200/dar)'',setsar=1,crop=200:100" -frames:v 1 image.jpg

El filtro de escala verifica la relación de aspecto de la fuente y la escala para que una dimensión se ajuste al lienzo de 200x100 y la otra sobrepase, a menos que sea una combinación perfecta. Luego, el filtro de cultivo lo cosecha a 200x100 desde el centro, cuidando así la región fuera de límites.