je veux savoir comment je peux découper une vidéo en images avec la jmf.
plus précisemment je veux générer les séquences d'images qui constituent une vidéo.
je veux savoir comment je peux découper une vidéo en images avec la jmf.
plus précisemment je veux générer les séquences d'images qui constituent une vidéo.
Dernière modification par Invité ; 24/05/2007 à 20h58.
salut,
ça m'a pris trop de temps mais en fin ça marche très bien.
voici le code qui permet d'en extraire toutes le images d'une vidéo.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127 /* Code écrit par Mehdiing Avant d'éxécuter le code vous devriez installer le package JMF. Ce code ne marche que pour les médias de format AVI. */ import javax.media.*; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.FileOutputStream; import javax.media.control.FrameGrabbingControl; import javax.media.control.FramePositioningControl; import javax.media.format.VideoFormat; import javax.media.util.BufferToImage; public class Video_Images implements ControllerListener{ Buffer buf = null; Image img = null; BufferToImage btoi = null; private Player player = null; //Constructeur public Video_Images(String a) { super(); try { /*La création du lecteur et le chargement du fichier à lire.*/ player = Manager.createPlayer( new MediaLocator(a) ); /*L'ajout d'un écouteur sur le player pour pouvoir gérer les évenements de ce dernier*/ player.addControllerListener( this ) ; /*Cette fonction permet au player d'acquérir toutes les informations et toutes les ressources qui lui sont nécessaires sur le média*/ System.out.println("Acquésition des ressources et des informations média en cours."); System.out.println("Patientez S'il vous plait."); player.realize(); } catch (Exception e) { /*Traitement des erreurs qui peuvent survenir lors de la création du lecteur.*/ System.out.println("Error creating player"); return; } } /*On implimente la fonction controllerUpdate de la classe ControllerListener qui nous permet de gérer les évenemnts du player.*/ public void controllerUpdate( ControllerEvent ce ) { /* une fois les ressources et les informations nécessaires pour le média sont reconnus on passe au traitement.*/ if ( ce instanceof RealizeCompleteEvent ) { int NomImage = 1; int dest; FramePositioningControl fpc; FrameGrabbingControl fgc; Time duration = player.getDuration(); int totalFrames = FramePositioningControl.FRAME_UNKNOWN; fpc = (FramePositioningControl) player.getControl("javax.media.control.FramePositioningControl"); if (fpc == null) { System.out.println("Le média ne supporte pas les FramePositioningControl."); } else { /* On calcul le nombre d'images dans le média. */ totalFrames = fpc.mapTimeToFrame(duration); System.out.println("Nombre total des images dans le média : " + totalFrames); /* boucle de parcours des images de le média. */ while (NomImage <= totalFrames) { /* La fonction skip nous permet d'avancer dans les images par exemple si le player pointe sur l'image 45 de le média et on fait dest = fpc.skip(10); le player pointera sur l'image 55. Pour la fonction seek on peut accéder directement à l'image qu'on désire par exemple quelque soit l'image sur laquelle pointe le player et on fait dest = fpc.seek(10) le player pointera sur l'image 10. */ dest = fpc.skip(1);//avec dest = fpc.seek(NomImage); ça marche aussi. /* On capture l'image pointé par le player. */ fgc = (FrameGrabbingControl) player.getControl("javax.media.control.FrameGrabbingControl"); /* On met l'image dans un buffer. */ buf = fgc.grabFrame(); /* On convertit l'image dans le buffer. */ btoi = new BufferToImage( (VideoFormat) buf.getFormat()); img = btoi.createImage(buf); /* Ici vous pouvez soit enregistrez l'image ou bien l'afficher dans un JPanel ... je vous laisse e choix. */ System.out.println("Image " + NomImage + "extraite"); NomImage = NomImage + 1; } } } } /*La fonction main. N'oubliez pas de changer le chemin de la video. */ public static void main(String[] args) { new Video_Images("file:C:\\video.avi" ); } }
Dernière modification par Invité ; 07/04/2010 à 13h13.
Mercibeaucoup au nom de ceux qui pourront réutiliser ton travail par la suite (même si personellement, pour l'instant je n'en ais aucunement l'utilité)...
Pour l'utilité, crois moi c'est vraiment très utile.![]()
car ça simplifie beaucoup la tâche de traitement de la vidéo.
avec ça en peut aider à la détection de mouvement, on applique des filtres aux vidéos : détection de contours, transformation niveaux de gris...
![]()
hey dis donc !
Moi c'est exactement l'inverse que je veux faire ?
vous pourriez m'aider ?
bon tu peux trouver le code sur le site de sun.
ce code te permet de générer une vidéo .mov(quicktime movie)
voilà le lien
http://java.sun.com/products/java-me...esToMovie.html
il existe un autre dans le même site celui ci te permet de générer un fchier .avi
http://forum.java.sun.com/thread.jsp...sageID=2394574
Partager