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
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.
Bob EsponjaPHPants
-frames:v 1
para que tome el primer marco adecuado que encuentre. Esto me parece bien. Sin embargo, esto parece ignorar el-ss
pará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!gian
ss
antes de que-i
funcione 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.