2017-07-06 3 views
0

Je lis un flux RTSP depuis une caméra de surveillance et je veux utiliser ffmpeg pour créer un instantané de la caméra en jpeg. Principalement cela fonctionne pour créer un snapshot.jpg en utilisant l'option -update 1, mais si cela arrive (ce qu'il fait très souvent) que l'application cliente lit le fichier pendant que ffmpeg y écrit, l'image n'est affichée que partiellement.Comment sortir une séquence d'images dans une boucle avec ffmpeg du flux rtsp

Par conséquent, je veux utiliser ffmpeg pour capturer plus de 1 images dans une sorte de tampon circulaire, donc je peux accéder à l'image capturée juste avant la précédente et avoir aussi les n dernières images comme historique court.

Bien que ffmpeg permette de créer une série de jpgs, cela semble infini. Est-il possible de dire à ffmpeg de créer des images dans un modèle de fichier comme ceci:

pic1.jpg, pic2.jpg, pic3.jpg, pic4.jpg, pic5.jpg et après pic5.jpg de recommencer en utilisant pic1 .jpg etc. De cette façon, il pourrait consommer un flux en continu sans remplir mon lecteur. Malheureusement quelque chose comme -update 5 ne semble pas fonctionner (ffmpeg se termine simplement). Principalement, je peux aussi le laisser fonctionner à l'infini et nettoyer tous les fichiers de plus de n secondes, mais cela introduirait des frais supplémentaires et est à mon humble avis pas vraiment propre programmation par rapport à ffmpeg utilisant ce type de tampon circulaire.

Toute aide serait appréciée.

Répondre

2

Vous devez utiliser le segment muxer.

ffmpeg -i input -f segment -segment_time 0.0001 -segment_format singlejpeg -segment_wrap 5 pic%d.jpg 
+0

Merci beaucoup! Cela a fonctionné pour moi! Je suppose que l'ajout de -vf fps = fps = 1/5 fera alors une image toutes les 5 secondes, non? –

+0

Oui, mais la bonne façon d'y parvenir est '-vf select = 'not (mod (t, 5))'' et d'ajouter '-vsync 0' – Mulvya