ffmpeg rimuove le parti senza movimento


15

Ho una telecamera di sicurezza IP (192.168.0.8) in grado di trasmettere contenuti rtsp sulla rete.

Sono in grado di salvare quel contenuto (RAW) senza modifiche usando il comando ffmpeg successivo dal mio computer:

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

Sono anche in grado di ridimensionarlo al volo:

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

Ma come salvare solo quel video che contiene solo parti di rilevamento del movimento?

Ho provato a risolverlo usando i filtri di cambio scena di ffmpeg , ma senza fortuna.

Il mio obiettivo: avere una soluzione di monitoraggio video comune, che rilevi quando qualcuno si sta avvicinando alla telecamera e la salvi nel file video. Capisco che potrebbe non essere possibile farlo al volo dallo stream, quindi è OK per me salvare prima il file di grandi dimensioni, quindi elaborarlo con un altro comando ffmpeg e generare un nuovo file video che contiene solo parti rilevate dal movimento. Se puoi darmi consigli su cosa dovrei ricercare di più, sarò davvero grato.

Il flusso della mia videocamera viene trasmesso senza audio. Quindi, posso generare un set di immagini dal video originale, quindi selezionare le immagini appropriate e quindi salvare il nuovo video dalle immagini.


Vuoi implementare questo sistema o trovare un prodotto pronto per l'uso?
Woeitg,

@WOEITG Ho solo bisogno di qualsiasi soluzione di lavoro gratuita per Ubuntu 15.04+
rfedorov,

Per Windows, esiste un software chiamato ispy, che è possibile impostare per registrare il rilevamento del movimento. Poiché stai richiedendo una soluzione Linux, zoneminder.com dovrebbe essere un prodotto simile. Sfortunatamente non ho una risposta diretta alla tua domanda, ma +1 perché anch'io vorrei una risposta
MyNameWouldGoHere

Risposte:


7

Quello che farei è fare esattamente come hai detto, e salvare un grosso file dello stream, quindi utilizzare il select filtro FFMPEG con l' sceneespressione, che confronta la somiglianza dei frame consecutivi: select=gt(scene\,0.003)ad esempio. Maggiore è il numero, maggiore è la variazione tra i fotogrammi ignorata, nei test rapidi potrebbe essere necessario scendere fino a 0,00001-0,00005 a seconda del tipo di metraggio con cui si ha a che fare.

Combinalo con il setpts filtro , che modifica la "ora di inizio" dei fotogrammi video e finiresti con qualcosa del genere (per un video a 25 fps):

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

Intendiamoci, non sarai in grado di utilizzare -vcodec copyquando utilizzi i filtri video.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.