Buscar marcos mpeg / avi en linux

Podría tener un problema inusual para este sitio; entre otras funciones, administro la red inalámbrica para un campus corporativo grande. Como parte de una actualización de nuestros puntos de acceso inalámbricos, usé un soporte de metal para montar un AP en un riel a unos 10 pies del suelo. Cuando se montó, la parte inferior del punto de acceso estaba paralela al suelo.

Una semana después, nuestros técnicos de cableado notaron que alguien había doblado el AP unos 70 grados hacia arriba; Dada la fuerza del soporte, se necesitó mucha fuerza para hacer esto. Tenemos una cámara de seguridad a unos 90 pies de distancia de este AP, pero el área relevante que me importa es aproximadamente el 3 % del área de imagen de la cámara.

Debido a la borrosidad y al área pequeña del video, nuestro equipo de seguridad dijo que se necesitarían alrededor de 30 horas-hombre para buscar el video (una persona que lo ve durante 3,5 días... dadas las restricciones en la reproducción, no pueden hacer zoom durante avance rápido); como tal, no estaban interesados ​​en ir más lejos.

PREGUNTA :

Parece que podría haber alguna forma de crear una lista de intervalos de tiempo candidatos en el video, donde este área del 3% cambió drásticamente de lo normal para un período de tiempo determinado... digamos al menos 20 segundos.

TBH, el soporte es de solo $ 30; sin embargo, dado que nuestro viejo tipo de seguridad malhumorado juró que no se podía automatizar, lo tomé como un punto de curiosidad para ver si eso era cierto. Obviamente hay soluciones comerciales... Estoy buscando "gratis" en linux.

El archivo sería de unos 6 GB. ¿Existe una solución CLI de Linux para este problema? Solo necesito reducir los tiempos que miramos a algo manejable. Incluso si tuviera que usar una biblioteca de análisis de imágenes de python como OpenCV-python , esa es una posibilidad, pero espero (ab) usar algo así ffmpegpara este propósito. Si no existe tal herramienta, ¿qué función de Open-CV sería mejor para este trabajo?

Respuestas (1)

FFMPEG realmente no tiene las herramientas para realizar la detección de movimiento de forma inmediata. Ciertamente puede hacer el recorte usando el filtro de recorte : ¿ -vf crop=w:h:x:ydónde w:hestá el tamaño de su área recortada y x:ysus coordenadas en la imagen original? Entonces, su secuencia de comandos ffmpeg podría verse así:

ffmpeg -i input.avi -c:v libx264 -crf 20 -vf crop=123:45:67:89 output.mp4

Luego, puede encontrar un cuadro de la salida que no contenga movimiento, exportarlo a una imagen fija, invertirlo y volver a agregarlo al video usando la superposición para que solo se muestren las partes de los cuadros que son diferentes. Luego use el filtro blackdetect para encontrar marcos que sean negros. Luego, podría usar un shell-fu para eliminar esas partes del video y finalmente concatenar el resto en un solo clip. Uf.

…o podrías usar openCV. Aquí hay un script listo para usar que detecta movimiento: https://github.com/RobinDavid/Motion-detection-OpenCV

cuando dices -vf crop=w:h:x:y, estás hablando de ffmpegrecortar , ¿verdad? Cuando dices un "cuadro vacío", no estoy seguro de cómo lo encontraría en un archivo de video... Estoy pensando que el proyecto github que mencionaste podría ser el camino a seguir.
"marco vacío" que significa un marco donde no pasa nada. Sí, usa el guión, a menos que realmente quieras un ejercicio de aprendizaje.