Extraiga el cuadro clave del video con ffmpeg

Necesito generar una miniatura para videos para una aplicación web y actualmente lo estoy haciendo con este comando:

ffmpeg -ss <seconds> -i <input file> -vframes 1 -y <output file>

Bastante básico, y hace el trabajo. Pero, por supuesto, a veces los marcos no son muy "interesantes".

Por ejemplo, a veces el video se ha desvanecido a negro a medida que cambia la escena, o podría ser algo aburrido, como los créditos, o algo similar.

Necesito algún tipo de forma algorítmica para extraer algo interesante del video y esencialmente filtrar las partes aburridas.

¿Hay algo en FFmpeg que pueda hacer esto más fácil?

De lo contrario, tendré que recopilar una cantidad de cuadros y procesarlos fuera de FFmpeg; probablemente usando PHP. Como nota al margen, si alguien tiene algún código existente que haga esto, ¡sería muy útil!

Muchas gracias

Respuestas (1)

Ningún código ffmpeg puede identificar marcos interesantes. Como mucho, hay filtros que detectan fotogramas representativos y filtros que identifican fotogramas con un cambio de escena. Entonces, en el mejor de los casos, hay un filtro de miniaturas para esto, más o menos. No puede detectar fotogramas "interesantes", pero detecta fotogramas representativos. Por lo tanto, los fotogramas de la mitad de los fundidos deberían estar fuera.

La sintaxis es

ffmpeg -ss 50 -i in.avi -vf thumbnail=300 -vsync 0 thumbs%d.png

Esto seleccionará un marco representativo de cada lote de 300 marcos consecutivos.

Esta parece ser la respuesta, gracias. Sin embargo, creo que el uso de la sintaxis es algo diferente. Ejecutar el comando anterior da como resultado un solo archivo de más de 1 GB (debe contener un cuadro cada 300 cuadros), en lugar de producir una imagen separada para cada cuadro. Además, como solo necesitamos un marco, creo que podemos agregarlo -frames:v 1para que tome el primer marco adecuado que encuentre. Esto me parece bien. Sin embargo, esto parece ignorar el -ssparámetro por lo que puedo decir. Sería ideal comenzar a buscar miniaturas después de X segundos, pero tal vez no sea necesario. ¡Gracias de nuevo!
Comprueba tu versión de ffmpeg. Tanto ssantes de que -ifuncione como la salida es un conjunto de archivos de imagen (PNG es un formato de imagen fija, de todos modos). Se necesita un cambio para evitar una peculiaridad de ffmpeg que duplicará fotogramas. He agregado eso al comando.