OpenCV + python – captura fotogtwigs de un archivo de video

Parece que no puedo capturar marcos de un archivo usando OpenCV. He comstackdo desde la fuente en Ubuntu con todos los requisitos previos necesarios de acuerdo con: http://opencv.willowgarage.com/wiki/InstallGuide%20%3A%20Debian

#!/usr/bin/env python import cv import sys files = sys.argv[1:] for f in files: capture = cv.CaptureFromFile(f) print capture print cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_WIDTH) print cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_HEIGHT) for i in xrange(10000): frame = cv.QueryFrame(capture) if frame: print frame 

Salida:

 ubuntu@local:~/opencv$ ./test.py bbb.avi  0.0 0.0 

Los marcos son siempre ninguno …

He transcodificado un archivo de video a formato i420 usando:

 mencoder $1 -nosound -ovc raw -vf format=i420 -o $2 

¿Algunas ideas?

    No tienes instalados los paquetes gstreamer-ffmpeg o gsteamer-python o gsteamer-python-devel . Instalé los tres. y el mismo problema fue resuelto.

    Estoy usando OpenCV 2.2.0, comstackdo en Ubuntu desde la fuente. Puedo confirmar que el código fuente que proporcionó funciona como se esperaba. Así que el problema está en otra parte.

    No pude reproducir su problema usando mencoder (instalarlo es un problema en mi máquina), así que usé ffmpeg para envolver un video sin procesar en el contenedor AVI:

     ffmpeg -s cif -i ~/local/sample-video/foreman.yuv -vcodec copy foreman.avi 

    (foreman.yuv es una secuencia de imágenes CIF estándar que puede encontrar en la red si mira a su alrededor ).

    Ejecutar el AVI desde ffmpeg través de su fuente da esto:

     misha@misha-desktop:~/Desktop/stackoverflow$ python ocv_video.py foreman.avi  352.0 288.0   ... 

    Así que las cosas funcionan como se espera. Lo que debe comprobar:

    • ¿Recibe algún error en la salida estándar / error estándar? OpenCV usa ffmpeg bibliotecas ffmpeg para leer archivos de video, así que esté atento a los mensajes informativos. Esto es lo que sucede si intenta reproducir un archivo de video RAW sin un contenedor (suena similar a su problema):

    error:

     misha@misha-desktop:~/Desktop/stackoverflow$ python ocv_video.py foreman.yuv [IMGUTILS @ 0x7fff37c8d040] Picture size 0x0 is invalid [IMGUTILS @ 0x7fff37c8cf20] Picture size 0x0 is invalid [rawvideo @ 0x19e65c0] Could not find codec parameters (Video: rawvideo, yuv420p) [rawvideo @ 0x19e65c0] Estimating duration from bitrate, this may be inaccurate GStreamer Plugin: Embedded video playback halted; module decodebin20 reported: Your GStreamer installation is missing a plug-in.  0.0 0.0 
    • Asegúrese de que su archivo AVI realmente contenga la información requerida para reproducir el video. Como mínimo, estas deben ser las dimensiones del marco. El video RAW generalmente no contiene ninguna información además de los datos de píxeles reales, por lo que es necesario conocer las dimensiones del cuadro y el FPS. Puede hacer una suposición errónea del FPS y seguir obteniendo un video visible, pero si se equivocan en las dimensiones, el video no se podrá ver.
    • Asegúrate de que el archivo AVI que estás intentando abrir se pueda reproducir. Pruebe ffplay file.avi : si eso falla, entonces es probable que el problema esté en el archivo. Intente usar ffmpeg para transcodificar en lugar de mencoder .
    • Asegúrese de que puede reproducir otros videos, utilizando el mismo método que el anterior. Si no puedes, entonces es probable que tu instalación ffmpeg esté dañada.