2011-03-24 12 views
6

Ciągle pojawia się błąd potwierdzenia podczas próby zapisu klatek do wideo. Błąd Dostaję to:Pisanie wideo za pomocą OpenCV + Python + Mac

Traceback (most recent call last): 
    File "VideoMixer.py", line 23, in <module> 
    cv.WriteFrame(writer, cv.LoadImage(fileName)) 
cv.error: dst.data == dst0.data 

Oto mój skrypt:

import cv 
import sys 

files = sys.argv[1:] 

for f in files: 
    capture = cv.CaptureFromFile(f) 
    height = cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_WIDTH) 
    width = cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_HEIGHT) 
    fps = cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FPS) 
    fourcc = cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FOURCC) 
    print fourcc 
    writer = cv.CreateVideoWriter('ok.mov', int(fourcc),fps,(int(width),int(height)),1) 
    print writer 
    for i in range(30): 
     frame = cv.QueryFrame(capture) 
     print frame 
     if frame: 
      cv.WriteFrame(writer, frame) 

Zapisywanie klatki jako zdjęcia działa dobrze, więc wiem, nie ma nic złego w zdobyciu. Czy tworzę pisarza źle? "Print fourcc" wyprowadza 0.0, ale próbowałem z wieloma wartościami FOUR_CC.

Dzięki!

Odpowiedz

6

Czy niektóre z twoich ramek mają różne przestrzenie kolorów lub głębokości? Kilka obserwacji:

  • Zamieniłeś wysokość i szerokość w kodzie, czy to celowo?
  • Twoja fourcc powinna być liczbą całkowitą> 0. Zobacz mój przykład poniżej.

Nie osobiście wygenerowałem wideo Quicktime przy użyciu OpenCV, ale to działało dla mnie generowanie nieskompresowanego pliku AVI. Wybieram fourcc i420 używając cv.CV_FOURCC funkcję:

import cv 
import sys 

# standard RGB png file 
path = 'stack.png' 
cap = cv.CaptureFromFile(path) 
fps = 24 
width = int(cv.GetCaptureProperty(cap, cv.CV_CAP_PROP_FRAME_WIDTH)) 
height = int(cv.GetCaptureProperty(cap, cv.CV_CAP_PROP_FRAME_HEIGHT)) 
# uncompressed YUV 4:2:0 chroma subsampled 
fourcc = cv.CV_FOURCC('I','4','2','0') 
writer = cv.CreateVideoWriter('out.avi', fourcc, fps, (width, height), 1) 
for i in range(90): 
    cv.GrabFrame(cap) 
    frame = cv.RetrieveFrame(cap) 
    cv.WriteFrame(writer, frame) 

Aktualizacja: ScreenCapture z VLC grając out.avi:

enter image description here

w QuickTime:

enter image description here

+2

Wielkie dzięki, ale czy jesteś w stanie grać out.avi? Skrypt działa dobrze dla mnie i tworzy plik, ale VLC daje mi błąd, gdy próbuję go odtworzyć: ps error: nie można zerknąć na główny debug: nie można zainstalować modułu demux "avi" główne debugowanie: TIMER module_need() : 303.765 ms - łącznie 303.765 ms/1 intvls (Avg 303.765 ms) główny błąd: brak odpowiedniego modułu demux dla 'file /: ///Users/***/Documents/Code/Video/out.avi ' – rgbrgb

+0

Mogę odtwarzaj plik, używam najnowszego VLC na Macu. Zaktualizuję moją odpowiedź za pomocą screencap. – samplebias

+0

Byłem również w stanie otworzyć i odtworzyć plik out.avi przy użyciu [AviDemux] (http://avidemux.sourceforge.net/) i QuickTime. – samplebias

4

Próbowałem różnych kodeków w tym 'MJPG' i 'I420' i żaden z nich nie pracował na moim Mac OpenCV budować. Stworzyli maleńkie pliki wyjściowe bez możliwości narzekania.

Potem znalazłem this page, który wymienia niektóre kodeki, które działały dla mnie. Na przykład. "mp4v" działa dobrze na moim Macu i QuickTime jest w stanie go odtworzyć.

+1

@mtoosi, jakie rozszerzenie pliku zapisałeś jako plik? Próbowałem 'codec = cv.CV_FOURCC ('M', 'P', '4', 'V')' i zapisując plik jako '/ full/path/do/file/out.mp4v', który wygenerował poprawny plik, ale nie taki, który otwiera się w QuickTime lub VLC. – cooncesean

+0

@cooncesean, użyłem '.avi' jako rozszerzenie pliku we wszystkich przypadkach IIRC. Byłem też na OS X 10.8 i zbudowałem OpenCV 2.4.3 sam ze wszystkimi flagami domyślnymi i żadnymi bibliotekami stron trzecich zainstalowanymi w systemie. – mtoossi

+0

FYI Pracuję w systemie OS X 10.11 z OpenCV 2.4.13.2 i mogłem wykonać tę pracę z 'cv2.cv.CV_FOURCC ('M', 'P', '4', 'V')' i wynikowa nazwa pliku z rozszerzeniem '.avi'. Rozszerzenie pliku '.mp4' wygenerowało wideo z pojedynczą ramką i bez ruchu. – trianta2

Powiązane problemy