¿Por qué no puedo abrir un video avi en openCV?

Acabo de escribir un ejemplo de lectura de video simple con openCV2.3.1, pero parece que no puedo abrir el video avi de todos modos 🙁

VideoCapture capture("guitarplaying.avi"); if(!capture.isOpened()){ std::cout<=0) break; } capture.release(); 

Hice un punto de interrupción en std::cout<<"cannot read video!\n" y descubrí que se detenía aquí cada vez. Entonces, ¿por qué no se puede abrir el video avi? ¡Gracias!

1)
Asegúrese de que el archivo de video esté realmente en la misma carpeta que la aplicación (supongo que ya ha probado esto), de lo contrario especifique la ruta absoluta.

2)
Si está en Windows, es posible que necesite un paquete de códec para leer el archivo de video (por ejemplo, K-Lite Codec Pack ).

Como sugirió Macmade, AVI es simplemente un contenedor que puede albergar diferentes códecs de audio, video o incluso de subtítulos. Además, aquí están las comstackciones FFmpeg de Zeranoe para Windows. Puede obtener más información sobre el contenido del códec de su archivo si hace lo siguiente:

 ffmpeg -i guitarplaying.avi 

Debería ver un resultado que se ve así:

 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 : 

Entonces, como puede ver, este contenedor .mp4 tiene un códec de video H.264 y un códec de audio AAC.

Ffmpeg.dll de un OpenCV faltante no genera advertencias / errores en OpenCV 2.3.1, y el código falla silenciosamente. Asegúrese de tener el opencv_ffmpeg * .dll adecuado en su ruta.

Puede ser que cargues el archivo lib incorrecto. Al igual que yo, tengo el mismo problema. Pero puedo abrir un archivo AVI en VC6.0 que usa la versión 1.0 de opencv. Finalmente, encuentro que utilizo la lib incorrecta.

En el modo de depuración, pero uso opencv_core220.lib y opencv_highgui220.lib .Y los reemplazo con opencv_core220d.lib y opencv_highgui220d.lib . Ahora puedo leerlo.

En OpenCV 2.4.4: solo hay opencv_ffmpeg244.dll (release dll) y no opencv_ffmpeg244d.dll (debug dll)

¡Entonces prueba en el modo de comstackción de lanzamiento!

También encuentro el mismo problema. Con el código de muestra para VideoCapture, mi progtwig de estudio visual no pudo abrir ningún archivo de video. Entonces, la sugerencia de nimcap funciona para mí. “Un archivo ffmpeg.dll de OpenCV que falta no genera advertencias / errores en OpenCV 2.3.1 y el código falla silenciosamente. Asegúrese de tener el archivo opencv_ffmpeg * .dll adecuado en su ruta”.

Solución: copie opencv_ffmpeg.dll en mi proyecto visual de estudio /Debug carpeta /Debug , puedo abrir casi cualquier archivo de video con VideoCapture.

En Windows x64 , no es necesario cambiar el nombre de nada. Simplemente ponga lo siguiente … \ opencv \ build \ x64 \ vc12 \ bin en su RUTA .

Solo cambia tu código de esto:

 VideoCapture capture("guitarplaying.avi"); 

a esto:

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

Solo estoy agregando esto porque pasé más tiempo del que me gustaría admitir. No poder abrir el archivo causó una tonelada de extrañas excepciones.

Si encuentra que las rutas absolutas funcionan, mientras que las rutas relativas no funcionan, otra cosa que debe verificar es asegurarse de que el directorio de trabajo esté configurado correctamente.

En Visual Studio, esto es Propiedades del proyecto (Propiedades de configuración) -> Depuración -> Directorio de trabajo. Encontré el mío establecido en “$ (ProjectDir)” de forma predeterminada cuando realmente quería “$ (OutDir)”.

Solo tiene que descargar para su máquina Xvid de xvid.org eso es todo: http://www.xvid.org/Downloads.15.0.html

Abra D:\OpenCV\build\x64\vc14\bin y copie el opencv_ffmpeg320.dll o opencv_ffmpeg320_64.dll que es relevante para usted en función de su Windows (x86 or x64) .

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

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

Pegue el C:\Python27\ .dll copiado en C:\Python27\ o cualquier ubicación a la que se pueda acceder desde las variables de entorno de Windows PATH .

Alternativamente, podría crear una carpeta D:\OpenCV\vendor\ y agregar el archivo .dll a esa carpeta y luego agregar D:\OpenCV\vendor\ a windows environment variables .