ffmpeg eliminar partes sin movimiento

ffmpeg eliminar partes sin movimiento

Tengo una cámara de seguridad IP (192.168.0.8) que puede transmitir contenido rtsp a través de la red.

Puedo guardar ese contenido (RAW) sin cambios usando el siguiente comando ffmpeg desde mi computadora:

ffmpeg -i "rtsp://192.168.0.8/stream=0.sdp" -acodec copy -vcodec copy test-raw.mp4

También puedo cambiar su tamaño sobre la marcha:

ffmpeg -i "rtsp://192.168.0.8/stream=0.sdp" -vf  "scale=640:-1" test640.mp4

Pero, ¿cómo guardar sólo el vídeo que contiene únicamente partes de detección de movimiento?

Intenté solucionarlo usando ffmpeg.filtros de cambio de escena, pero no hubo suerte.

Mi objetivo es tener una solución común de monitoreo de video, que detecte cuando alguien se acerca a la cámara y lo guarde en el archivo de video. Entiendo que puede que no sea posible hacerlo sobre la marcha desde la transmisión, por lo que está bien que primero guarde un archivo grande, luego lo procese con otro comando ffmpeg y genere un nuevo archivo de video que contenga solo partes detectadas por movimiento. Si puedes darme consejos sobre qué debería investigar más exactamente, te lo agradeceré mucho.

La transmisión de mi cámara se transmite sin sonido. Entonces, puedo generar un conjunto de imágenes a partir del video original, luego elegir las imágenes adecuadas y luego guardar el nuevo video a partir de las imágenes.

Respuesta1

Lo que haría es hacer exactamente lo que dijiste y guardar un archivo grande de la transmisión, luego usar elselect filtro FFMPEGcon la sceneexpresión que compara la similitud de fotogramas consecutivos: select=gt(scene\,0.003)por ejemplo. Cuanto mayor sea el número, más cambios entre fotogramas se ignoran; en pruebas rápidas, es posible que tengas que bajar hasta 0,00001-0,00005 dependiendo del tipo de metraje con el que estés trabajando.

Combina eso con elsetpts filtrar, que modifica la "hora de inicio" de los fotogramas de vídeo, y terminarías con algo como (para un vídeo de 25 fps):

ffmpeg -i input.mp4 -vf "select=gt(scene\,0.003),setpts=N/(25*TB)" output.mp4

Eso sí, no podrás utilizarlos -vcodec copycuando utilices filtros de vídeo.

información relacionada