Por que não consigo abrir um vídeo avi no openCV?

Eu acabei de escrever um exemplo de leitura de vídeo simples com openCV2.3.1, mas parece que não consigo abrir vídeo avi de qualquer maneira 🙁

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

Fiz um ponto de interrupção em std::cout<<"cannot read video!\n" e descubro que ele parou aqui toda vez. Então, por que o vídeo avi não pode ser aberto? Obrigado!

1)
Verifique se o arquivo de vídeo está na mesma pasta que o aplicativo (suponho que você já tenha tentado isso), caso contrário, especifique o caminho absoluto.

2)
Se você está no Windows, você pode precisar de um pacote de codecs para ler o arquivo de vídeo (por exemplo, K-Lite Codec Pack ).

Como o Macmade sugeriu, o AVI é apenas um contêiner que pode abrigar diferentes codecs de áudio, vídeo ou até mesmo closed caption. Além disso, aqui estão as compilações FFmpeg do Zeranoe para o Windows. Você pode obter mais informações sobre o conteúdo do codec do seu arquivo se fizer o seguinte:

 ffmpeg -i guitarplaying.avi 

Você deve ver uma saída assim:

 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 : 

Então, como você pode ver, o contêiner .mp4 tem um codec de vídeo H.264 e um codec de áudio AAC.

Um ffmpeg.dll ausente do OpenCV não gera nenhum aviso / erro no OpenCV 2.3.1, e o código falha silenciosamente. Certifique-se de ter o opencv_ffmpeg * .dll adequado em seu caminho.

Pode ser que você carregue o arquivo lib incorreto.Só como eu, eu recebo o mesmo problema.Mas eu posso abrir o arquivo AVI em VC6.0 que usam a versão opencv 1.0.Finalmente, eu acho que eu uso a lib errada.

No modo de debugging, mas eu uso opencv_core220.lib e opencv_highgui220.lib .E eu substituí-los com opencv_core220d.lib e opencv_highgui220d.lib Agora eu posso lê-lo.

No OpenCV 2.4.4: existe apenas o opencv_ffmpeg244.dll (dll de versão) e não o opencv_ffmpeg244d.dll (dll de debugging)

Então tente no modo de compilation de lançamento!

Eu também encontro o mesmo problema. Com o código de exemplo do VideoCapture, meu programa de estúdio visual não conseguiu abrir nenhum arquivo de vídeo. Então, a sugestão de nimcap funciona para mim. “O ffmpeg.dll de um OpenCV ausente não gera nenhum aviso / erro no OpenCV 2.3.1, e o código falha silenciosamente. Certifique-se de ter o opencv_ffmpeg * .dll apropriado em seu caminho.”

Solução: Copie opencv_ffmpeg.dll para o meu projeto de estúdio visual /Debug pasta /Debug , posso abrir quase todos os arquivos de vídeo com o VideoCapture.

No Windows x64 , você não precisa renomear nada. Basta colocar o seguinte … \ opencv \ build \ x64 \ vc12 \ bin no seu PATH .

Apenas mude seu código disto:

 VideoCapture capture("guitarplaying.avi"); 

para isso:

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

Só estou adicionando isso desde que passei mais tempo do que gostaria de admitir. Não ser capaz de abrir o arquivo causou uma tonelada de estranhas exceções.

Se você descobrir que caminhos absolutos funcionam, enquanto caminhos relativos não funcionam, outra coisa a verificar é certificar-se de que o diretório de trabalho esteja configurado corretamente.

No Visual Studio, isto é Propriedades do Projeto (Propriedades de Configuração) -> Depuração -> Diretório de Trabalho. Eu encontrei o meu definido como “$ (ProjectDir)” por padrão quando eu realmente queria “$ (OutDir)”.

Você precisa apenas fazer o download para sua máquina Xvid de xvid.org que é tudo: http://www.xvid.org/Downloads.15.0.html

Abra D:\OpenCV\build\x64\vc14\bin e copie o opencv_ffmpeg320.dll ou opencv_ffmpeg320_64.dll que é relevante para você com base no seu Windows (x86 or x64) .

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

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

Cole o C:\Python27\ .dll copiado em C:\Python27\ ou qualquer local que seja acessível a partir de variables ​​de ambiente do Windows PATH .

Como alternativa, você pode criar uma pasta D:\OpenCV\vendor\ e adicionar o arquivo .dll a essa pasta e, em seguida, adicionar D:\OpenCV\vendor\ às windows environment variables .