Clés D'Extraction D'Image De La Vidéo
J'ai besoin Besoin D'extraire Images Clés à partir de la Vidéo/Stream.Si il ya une norme de mise en œuvre.
J'utilise open CV.
(Actuellement, je suis l'extraction d'images à la seconde qui est plus lent j'ai besoin pour améliorer les performances.)
Donc si quelqu'un a optimisé la mise en œuvre, veuillez répondre ici.
OriginalL'auteur user1178178 | 2012-01-30
Vous devez vous connecter pour publier un commentaire.
En utilisant ffmpeg, vous pouvez extraire toutes les images clés à l'aide du code suivant:
Ce qui suit-vf dans un ffmpeg en ligne de commande est un Filtergraph description. L'sélectionnez le filtre sélectionne les images à transmettre en sortie. La constante du filtre est “pict_type” et la valeur “ PICT_TYPE_I”. Donc, ffmpeg est seulement de passage des images clés à la sortie.
-vsync 2 empêche de ffmpeg pour générer plus d'une copie pour chaque image clé.
-f image2 écrit des images vidéo pour les fichiers d'image. Les noms de fichiers en sortie sont spécifiés par un modèle, qui peut être utilisé pour produire de l'numérotés dans l'ordre de la série de fichiers. Le modèle contient la chaîne "%d" ou "%0Nd".
De référence:
http://www.videoproductionslondon.com/blog/scene-change-detection-during-encoding-key-frame-extraction-code
Je reçois
Undefined constant or missing '(' in 'PICT_TYPE_I)'
Bonjour ! C'est un précieux commande, cependant il est égaré et vous avez peut-être redimensionner les images. Vous devriez mettre l'-je vidéo.mp4 tout d'abord, avant tout le reste. Il va comme : ffmpeg -i "yourInputVideo.mp4" -vf select="eq(pict_type\,PICT_TYPE_I)" -vsync 2 -f image2 thumbnail_%02d.jpeg
OriginalL'auteur Munarriz
Je vais supposer que un image clé est un cadre, de présenter un contenu très différent des précédents (ce n'est pas une définition formelle, mais il s'adapte). Prendre des images je et i+1. Utilisation cv2.absDiff de calculer la différence entre les cadres et cv2.sumElems pour obtenir la somme de tous les pixels de différences. Faites cela pour toutes les images je. Cela permettra de réduire votre flux vidéo à un unidimensionnel signal. Recherchez pics dans ce signal et de sélection des images-clés correspondant à ces pics. Pour trouver les pics de choisir un seuil sur ce signal soit manuellement par trouver une image que vous estimez être la clé, et de laisser son erreur soit le seuil d'erreur ou automatiquement à l'aide de statistiques (par exemple n'importe quelle image i+1 où l'erreur est supérieure à 1, la fonction ecartype de l'erreur moyenne).
La somme des canaux RVB ou simplement l'utiliser en niveaux de gris.
Pouvez-vous partager un exemple de code pour trouver l'image à pics
de revenir à cette réponse 6 ans plus tard, toujours aussi génial!
OriginalL'auteur TH.
Si quelque chose de mal avec le code ci-dessus, essayez de cet argument.
OriginalL'auteur backing
Le ffmpeg solution devrait bien fonctionner.
Pour quelqu'un qui rencontrent des problèmes avec le filtre " eq(pict_type\,PICT_TYPE_I)", vous pourriez vouloir essayer le filtre 'eq(pict_type\,I)'. Elle a été cassée pendant un certain temps de sorte que certaines versions de ffmpeg pourriez ne pas reconnaître la constante. Le correctif peut être vu ici.
La commande finale qui a travaillé pour moi, enfin, a:
OriginalL'auteur sanchitarora
Vous pouvez utiliser ffprobe pour extraire des images clés. C'est un outil ffmpeg.
ffprobe.mp4 -select_streams v -show_entries frame=key_frame,pkt_pts_time -de csv=nk=1:p=0 | findstr "1,"
OriginalL'auteur