Je viens d'écrire un exemple de lecture vidéo simple avec openCV2.3.1, mais il semble que je ne puisse pas ouvrir la vidéo avi de toute façon :(
VideoCapture capture("guitarplaying.avi");
if(!capture.isOpened()){
std::cout<<"cannot read video!\n";
return -1;
}
Mat frame;
namedWindow("frame");
double rate = capture.get(CV_CAP_PROP_FPS);
int delay = 1000/rate;
while(true)
{
if(!capture.read(frame)){
break;
}
imshow("frame",frame);
if(waitKey(delay)>=0)
break;
}
capture.release();
J'ai fait un point d'arrêt dans std::cout<<"cannot read video!\n"
et constate que cela s'arrêtait ici à chaque fois. Alors pourquoi la vidéo avi ne peut pas être ouverte? Merci!
1)
Assurez-vous que le fichier vidéo se trouve bien dans le même dossier que l'application (je suppose que vous avez déjà essayé), sinon spécifiez le chemin absolu.
2)
Si vous utilisez Windows, vous aurez peut-être besoin d'un pack de codecs pour lire le fichier vidéo (par exemple, K-Lite Codec Pack ).
Comme l'a suggéré Macmade, AVI est simplement un conteneur qui peut héberger différents codecs audio, vidéo ou même des sous-titres codés. En outre, ici sont les versions FFmpeg de Zeranoe pour Windows. Vous pouvez obtenir plus d'informations sur le contenu du codec de votre fichier si vous procédez comme suit:
ffmpeg -i guitarplaying.avi
Vous devriez voir une sortie qui ressemble à ceci:
ffmpeg version 0.8.7.git, Copyright (c) 2000-2011 the FFmpeg developers
built on Dec 6 2011 09:20:43 with gcc 4.6.1
configuration: --pkg-config=pkg-config --enable-gpl --enable-version3 --enable
-nonfree --enable-runtime-cpudetect --enable-memalign-hack --enable-postproc --a
rch=x86 --target-os=mingw32 --cross-prefix=i686-w64-mingw32- --prefix=/home/wluc
as/ffmpeg-cross/build/deploy --enable-libx264 --enable-libvpx --enable-zlib --en
able-bzlib --enable-libxvid --enable-libfaac --enable-libmp3lame --enable-libvor
bis --enable-libtheora --enable-libopenjpeg --enable-libfreetype
libavutil 51. 30. 0 / 51. 30. 0
libavcodec 53. 40. 0 / 53. 40. 0
libavformat 53. 24. 0 / 53. 24. 0
libavdevice 53. 4. 0 / 53. 4. 0
libavfilter 2. 51. 0 / 2. 51. 0
libswscale 2. 1. 0 / 2. 1. 0
libpostproc 51. 2. 0 / 51. 2. 0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '..\..\Videos\Sintel\sintel_trailer-720p
.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
creation_time : 1970-01-01 00:00:00
title : Sintel Trailer
artist : Durian Open Movie Team
encoder : Lavf52.62.0
copyright : (c) copyright Blender Foundation | durian.blender.org
description : Trailer for the Sintel open movie project
Duration: 00:00:52.20, start: 0.000000, bitrate: 1165 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720,
1033 kb/s, 24 fps, 24 tbr, 24 tbn, 48 tbc
Metadata:
creation_time : 1970-01-01 00:00:00
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, s16, 126
kb/s
Metadata:
creation_time : 1970-01-01 00:00:00
handler_name :
Donc, comme vous pouvez le voir, ce conteneur .mp4 possède un codec vidéo H.264 et un codec audio AAC.
Un ffmpeg.dll manquant d'OpenCV ne génère aucun avertissement/erreur dans OpenCV 2.3.1 et le code échoue en silence. Assurez-vous que vous avez bien opencv_ffmpeg * .dll sur votre chemin.
Peut-être que vous chargez le mauvais fichier lib.Juste comme moi , J'obtiens le même problème.Mais je peux ouvrir le fichier AVI dans VC6.0 qui utilise la version opencv 1.0.Enfin , Je trouve que j'utilise la mauvaise lib.
En mode débogage , mais j'utilise opencv_core220.lib
et opencv_highgui220.lib
.Et je les remplace par opencv_core220d.lib
et opencv_highgui220d.lib
.Maintenant je peux le lire.
Dans OpenCV 2.4.4: il n'y a que opencv_ffmpeg244.dll (release dll) et pas opencv_ffmpeg244d.dll (debug dll)
Essayez donc en mode compilation de version!
Je rencontre également le même problème. Avec l'exemple de code pour VideoCapture, mon programme Visual Studio n'a pu ouvrir aucun fichier vidéo. Ensuite, la suggestion de nimcap fonctionne pour moi. "Un ffmpeg.dll d'OpenCV manquant ne génère aucun avertissement/erreur dans OpenCV 2.3.1, et le code échoue silencieusement. Assurez-vous que vous disposez du bon opencv_ffmpeg * .dll sur votre chemin."
Lösung: Copiez opencv_ffmpeg.dll à mon projet visuel de studio /Debug
dossier, je peux ouvrir presque n'importe quel fichier vidéo avec VideoCapture.
Modifiez simplement votre code à partir de ceci:
VideoCapture capture("guitarplaying.avi");
pour ça:
CvCapture *input_video = cvCreateFileCapture("guitarplaying.avi");
Sous Windows x64, vous n'avez rien à renommer. Il suffit de mettre ce qui suit ...\opencv\build\x64\vc12\bin dans votre CHEMIN .
J'ajoute juste à cela depuis que j'ai passé plus de temps que je ne voudrais l'admettre. Ne pas pouvoir ouvrir le fichier a provoqué une tonne d'exceptions étranges.
Si vous trouvez que les chemins absolus fonctionnent, alors que les chemins relatifs ne fonctionnent pas, une autre chose à vérifier est de vous assurer que le répertoire de travail est correctement défini.
Dans Visual Studio, il s'agit des propriétés du projet (propriétés de configuration) -> Débogage -> Répertoire de travail. J'ai trouvé le mien réglé sur "$ (ProjectDir)" par défaut quand je voulais vraiment "$ (OutDir)".