Bonsoir,

J'utilise OpenCV 2.1 sous Windows 7. Je souhaite créer un flux vidéo identique à celui en entrée. Pour cela, je fais :
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
 
// ouverture du flux vidéo à partir du fichier test.avi
capture = cvCaptureFromFile("test.avi");
 
// créer d'un video writer
 CvVideoWriter* writer
     = cvCreateVideoWriter("res.avi",
        //CV_FOURCC('P','I','M','1'),
        //CV_FOURCC('M','J','P','G'),
        cvGetCaptureProperty(capture, CV_CAP_PROP_FOURCC),
        cvGetCaptureProperty(capture, CV_CAP_PROP_FPS),
        cvSize(w, h)
        );
 
// get a frame
image = cvQueryFrame(capture);
 
// write a frame
cvWriteFrame(writer, image );
Le problème est que le programme plante sur la dernière ligne. Après investigation, il s'agit d'un problème de codec car la fonction cvGetCaptureProperty(capture, CV_CAP_PROP_FOURCC) semble retourner 0.0
De même en passant CV_FOURCC('P','I','M','1') ou CV_FOURCC('M','J','P','G'), le programme plante sur la même ligne.
En mettant -1 à ce paramètre, cela marche et j'ai une fenêtre qui s'ouvre me demandant de choisir le codec à utiliser mais quelque soit mon choix, la vidéo en sortie est beaucoup plus grosse que celle en entrée.

Je voudrais juste "dupliquer" une vidéo passée en entrée. (bien sur à termes, il y aura des traitements intermédiaires)

Il faut savoir que j'ai un warning :
Compiler did not align stack variables. Libavcodec has been miscompiled
and may be very slow or crash. This is not a bug in libavcodec,
but in the compiler. You may try recompiling using gcc >= 4.2.
Do not report crashes to FFmpeg developers.
Apparemment ce n'est pas grave... mais peut être que le problème vient de là mais aucune solution a été trouvé pour virer ce message à part utiliser Linux pour recompiler la lib !

Merci et bonne soirée