ffmpeg remove partes sem movimento

13

Eu tenho uma câmera de segurança IP (192.168.0.8) que é capaz de transmitir conteúdo rtsp pela rede.

Consigo salvar esse conteúdo (RAW) sem alterações usando o próximo comando ffmpeg do meu computador:

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

Eu também sou capaz de redimensioná-lo em tempo real:

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

Mas como salvar apenas aquele vídeo que contém apenas partes de detecção de movimento?

Eu tentei solucioná-lo usando os filtros de mudança de cena do ffmpeg, mas sem sorte.

Meu objetivo - ter uma solução de monitoramento de vídeo comum, que detecta quando alguém está se movendo perto da câmera e a salva no arquivo de vídeo. Eu entendo que pode não ser possível fazê-lo em tempo real a partir do fluxo, então é OK salvar arquivos grandes primeiro, depois processá-los com outro comando ffmpeg e gerar um novo arquivo de vídeo que contenha apenas partes detectadas por movimento. Se você puder me dar conselhos sobre o que exatamente eu deveria pesquisar mais, ficarei muito agradecido.

Meu fluxo de câmera é transmitido sem som. Assim, posso gerar um conjunto de imagens a partir do vídeo original, depois escolher imagens adequadas e depois salvar um novo vídeo a partir de imagens.

    
por rfedorov 10.10.2015 / 19:56

1 resposta

5

O que eu faço, é exatamente como você disse, e salve um arquivo grande do stream, então use o select Filtro FFMPEG com a expressão scene , que compara a similaridade de quadros consecutivos: select=gt(scene\,0.003) , por exemplo. Quanto maior o número, mais a mudança entre os quadros é ignorada, em testes rápidos você pode precisar ir tão baixo quanto 0,00001-0,00005, dependendo do tipo de filmagem que você está lidando.

Combine isso com o filtro setpts , que modifica o "horário de início" dos quadros de vídeo e você acabaria com algo parecido com (para um vídeo de 25 fps):

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

Lembre-se de que você não poderá usar -vcodec copy ao usar filtros de vídeo.

    
por 20.01.2016 / 23:52