Python - l'Extraction et l'Enregistrement d'Images Vidéo
J'ai donc suivi ce tutoriel mais il ne semble pas faire quoi que ce soit. Tout simplement rien. Il attend quelques secondes et se ferme le programme. Quel est le problème avec ce code?
import cv2
vidcap = cv2.VideoCapture('Compton.mp4')
success,image = vidcap.read()
count = 0
success = True
while success:
success,image = vidcap.read()
cv2.imwrite("frame%d.jpg" % count, image) # save frame as JPEG file
if cv2.waitKey(10) == 27: # exit if Escape is hit
break
count += 1
Aussi, dans les commentaires il est dit que cela limite les cadres à 1000? Pourquoi?
EDIT:
J'ai essayé de faire success = True
d'abord, mais cela n'a pas aidé. Il créé une image qui était de 0 octets.
- Quelle est la valeur de
success
? - Ses un booléen, je crois, le code du tutoriel je lien.
- Quelle est la valeur? Le type peut être de type boolean, mais est-il
True
ouFalse
? - Oui, mais qu'est-ce que votre valeur? Il pourrait être faux, dans ce cas, votre programme serait tout simplement "attendre quelques secondes et fermer". En d'autres termes, ajouter un
print success
quelque part. - J'ai essayé de le définir à
True
mais qui n'ont fait qu'une image est vide (0 octets) - Il ne fait pas de sens à force
success
; si elle est fausse, alors cela signifie que la vidéo de la lecture a échoué pour une raison quelconque. Vous avez besoin d'obtenir un peu de travail en premier. - J'ai essayé de faire un chemin d'accès complet à ma vidéo, en faisant
./
, en faisant juste le nom (comme dans le code) et les résultats ne changent pas. J'ai essayé plusieurs vidéos, avec ou sans audio, et rien ne fonctionne. - Votre readh est un échec. Avez-vous construit opencv avec python et ffmpeg comme indiqué dans le tutoriel?
brew install opencv --python27 --ffmpeg
si vous utilisez une autre version de Python que vous aurez besoin de le changer à votre version. - Êtes-vous à l'aide de OSX? Linux? Windows?
- Windows
Vous devez vous connecter pour publier un commentaire.
De ici télécharger ce vidéo nous avons donc le même fichier vidéo pour le test. Assurez-vous que le fichier mp4 dans le même répertoire de votre code python. Puis aussi assurez-vous d'exécuter l'interpréteur python à partir du même répertoire.
Ensuite modifier le code, un fossé
waitKey
que de perdre du temps aussi, sans fenêtre, il ne peut pas capturer les événements de clavier. Nous avons également imprimer lesuccess
valeur assurez-vous de lire les images correctement.Comment cela va?
Read a new frame: False
while
boucle, mais ça fait 50 vide jpeg.for i in range(50): success,image = vidcap.read() cv2.imwrite('Frame ' + str(i) + '.jpg',image)
print 'Read a new frame: ', success
avecprint('Read a new frame: ', success)
Voici donc le code final qui a travaillé:
Donc pour que cela fonctionne, vous aurez à obtenir certaines choses. Tout d'abord, télécharger OpenCV2. Puis installer pour Python 2.7.x. Aller à la ffmpeg dossier à l'intérieur de la 3ème partie du dossier (quelque chose comme
C:\OpenCV\3rdparty\ffmpeg
, mais je ne suis pas sûr). Copieopencv_ffmpeg.dll
(ou la version 64 bits si votre version de python est x64) et de le coller dans votre Python dossier (probablementC:\Python27
). Renommeropencv_ffmpeg300.dll
si votre opencv version 3.0.0 (vous pouvez le trouver ici), et de modifier en conséquence à votre version. Btw, vous devez avoir votre python dossier dans votre environnement path.success
variable retournée à partir de vidcap.méthode read (). Sinon, il renvoie une erreur lors de l'atteindre à la fin de la vidéo.Étendre sur cette question (& réponse par @user2700065) pour légèrement différents cas, si quelqu'un ne veut pas pour en extraire chaque image, mais veut extraire cadre de chaque seconde. Donc 1 minute de la vidéo va donner à 60 frames(images).
opencv-2.4.9
, donc au lieu decv2.CAP_PROP_POS_MSEC
j'ai eu à utilisercv2.cv.CAP_PROP_POS_MSEC
C'est un tweak réponse précédente pour python 3.x de @GShocked, je voudrais publier un commentaire, mais vous n'avez pas assez de réputation
Après beaucoup de recherches sur la façon de convertir des images de la vidéo que j'ai créé cette fonction espère que cette aide. Nous avons besoin d'opencv pour cela:
modifier la valeur de fps(images par seconde),entrée d'un chemin d'accès au dossier et le dossier de sortie chemin selon vos propres emplacements
C'est la Fonction qui va convertir la plupart des formats vidéo nombre de cadres il y a dans la vidéo. Il fonctionne sur
Python3
avecOpenCV 3+
Il prend en charge
.mts
et fichiers normaux comme.mp4
et.avi
. Essayé et Testé sur.mts
fichiers. Fonctionne comme un Charme.Les réponses précédentes ont perdu la première image. Et il sera agréable pour stocker les images dans un dossier.
Par le façon, vous pouvez vérifier la cadre de rate par VLC. Accédez à windows -> informations sur le média -> codec détails
Ce code d'extraire les images de la vidéo et enregistrer les images .jpg formiate
Cette fonction permet d'extraire des images de la vidéo à 1 fps, EN OUTRE, il identifie la dernière image et arrêt de la lecture aussi:
Je suis à l'aide de Python via Anaconda du Spyder logiciel. En utilisant le code d'origine cités dans la question de ce fil par @Gshocked, le code ne fonctionne pas (le python ne sera pas lire le fichier mp4). J'ai donc téléchargé OpenCV 3.2 et copié "opencv_ffmpeg320.dll" et "opencv_ffmpeg320_64.dll" depuis le "bin" du dossier. J'ai collé ces deux fichiers dll pour Anaconda de "Dll" le dossier.
Anaconda a aussi un "pckgs" le dossier...j'ai copié et collé à l'ensemble de la "OpenCV 3.2" dans le dossier que j'ai téléchargé à l'Anaconda "pckgs" le dossier.
Enfin, Anaconda a un dossier "Bibliothèque" qui a une "bin" sous-dossier. J'ai collé la "opencv_ffmpeg320.dll" et "opencv_ffmpeg320_64.dll" les fichiers de ce dossier.
Après la fermeture et le redémarrage Spyder, le code a fonctionné. Je ne sais pas laquelle des trois méthodes travaillé, et je suis trop paresseux pour aller en arrière et de le comprendre. Mais ça marche, merci!