2011-12-07 10 views
17

Ho appena scritto un semplice video di lettura ad esempio con openCV2.3.1, ma sembra che non posso aprire il video avi comunque :(Perché non posso aprire video avi in ​​openCV?

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(); 

ho fatto un punto di interruzione in std::cout<<"cannot read video!\n" e scoprire che si è fermato qui ogni volta. Quindi perché il video avi non può essere aperto? Grazie!

+1

AVI è un formato di file, non un formato video. Quindi dovresti controllare che il video sia codificato in un formato video supportato, in quanto un file AVI può essere codificato in modi diversi. – Macmade

risposta

4

1)
assicurarsi che il file video è in realtà nella stessa cartella dell'applicazione (sto supponendo che hai già provato questo), altrimenti specificare l'assoluto sentiero.

2)
Se siete su Windows, potrebbe essere necessario un pacchetto di codec per leggere il file video (ad esempio, K-Lite Codec Pack).

Come suggerito Macmade, AVI è semplicemente un contenitore che può ospitare audio diversa, video o codec didascalia addirittura chiusi. Inoltre, here sono build FFmpeg di Zeranoe per Windows. È possibile ottenere ulteriori informazioni sui contenuti codec del file se la seguente:

ffmpeg -i guitarplaying.avi 

Si dovrebbe vedere un output simile al seguente:

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 : 

Quindi, come si può vedere questo contenitore .mp4 ha un codec video H.264 e un codec audio AAC.

+1

Per espandere il punto 1: le persone spesso commettono l'errore di inserire il file immagine (avi, jpg, ecc.) Nella stessa cartella del loro codice sorgente invece della stessa cartella del programma compilato. – SSteve

+0

Descrive il problema, ma non la soluzione. La risposta di @nimcap spiega come risolverlo in modo conciso e preciso. –

+0

Copio opencv_ffmpeg310.dll, opencv_ffmpeg310x64.dll e il problema è stato risolto. Grazie mille. – mesutpiskin

46

Un file ffmpeg.dll di OpenCV mancante non genera alcun avviso/errore in OpenCV 2.3.1 e il codice non funziona correttamente. Assicurati di avere opencv_ffmpeg * .dll corretto nel tuo percorso.

+0

Questo mi ha tormentato per un paio d'ore, fino a quando ho visto questa risposta –

+0

Ho avuto questo problema esatto; non importa quale codificatore ho usato, non riuscirebbe a caricare fino a quando non ho copiato quella DLL. –

+0

Grazie mille! Stavo cercando di correggere i codec video e il codice per il rendering del video sulla mia macchina quando l'eseguibile cercava la dll ffmpeg. – Kartos

4

Può essere si carica il file.Just lib sbagliato come me, ho la stessa problem.but posso aprire file AVI in VC6.0 che usa la versione 1.0 di opencv. Infine, trovo che uso la lib errata.

in modalità debug, ma io uso opencv_core220.lib e opencv_highgui220.lib .E li sostituisco con opencv_core220d.lib e opencv_highgui220d.lib .Ora posso leggerlo.

1

In OpenCV 2.4.4: c'è solo opencv_ffmpeg244.dll (rilascio dll) e non opencv_ffmpeg244d.dll (debug dll)

in modo da provare in modalità di compilazione di rilascio!

+1

Ho avuto lo stesso problema DLL mancante. La versione "release" funziona per me sia in modalità di debug che di rilascio. – cbuchart

1

Incontro anche lo stesso problema. Con il codice di esempio per VideoCapture, il mio programma di Visual Studio non è riuscito ad aprire alcun file video. Quindi, il suggerimento di nimcap funziona per me. "Ffmpeg.dll di OpenCV mancante non genera alcun avviso/errore in OpenCV 2.3.1 e il codice non funziona in modo corretto. Assicurati di avere opencv_ffmpeg * .dll corretto nel tuo percorso."

Soluzione: copia opencv_ffmpeg.dll nella cartella del mio progetto di studio /Debug, posso aprire quasi tutti i file video con VideoCapture.

0

Sotto di Windows x64, non c'è bisogno di rinominare nulla. Basta mettere il seguente ... \ OpenCV \ accumulo \ x64 \ VC12 \ bin nel vostro PATH.

0

Basta modificare il codice da questa:

VideoCapture capture("guitarplaying.avi"); 

a questo:

CvCapture *input_video = cvCreateFileCapture("guitarplaying.avi"); 
-1

Aprire D:\OpenCV\build\x64\vc14\bin e copiare il opencv_ffmpeg320.dll o opencv_ffmpeg320_64.dll che sono rilevanti per voi in base alla tua Windows (x86 or x64).

opencv_ffmpeg320.dll -> per 32-bit Windows (x86)

opencv_ffmpeg320_64.dll -> per 64-bit Windows (x64)

Incollare il copiato .dll-C:\Python27\ o qualsiasi posizione che è accessibile da Windows PATH variabili d'ambiente.

In alternativa, è possibile creare una cartella D:\OpenCV\vendor\ e aggiungere .dll file in quella cartella e quindi aggiungere al vostro D:\OpenCV\vendor\windows environment variables.

0

Sto solo aggiungendo a questo poiché ho trascorso più tempo di quanto vorrei ammettere. Non essere in grado di aprire il file ha causato una tonnellata di strane eccezioni.

Se si rileva che i percorsi assoluti funzionano, mentre i percorsi relativi non funzionano, un'altra cosa da verificare è assicurarsi che la directory di lavoro sia impostata correttamente.

In Visual Studio si tratta di Proprietà progetto (Proprietà di configurazione) -> Debug -> Directory di lavoro. Ho trovato il mio impostato su "$ (ProjectDir)" di default quando volevo davvero "$ (OutDir)".

Problemi correlati