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.