Pymedia-videocodering mislukt

Ik gebruik Python 2.5 met Windows XP. Ik probeer een lijst met Pygame-afbeeldingen in een videobestand te maken met behulp van deze functie. Ik vond de functie op het internet en bewerkte deze. Het werkte eerst, dan dat het niet meer werkte. Dit is wat het heeft afgedrukt:

Making video...
Formating 114 Frames...
starting loop
making encoder
Frame 1 process 1
Frame 1 process 2
Frame 1 process 2.5

Dit is de fout:

Traceback (most recent call last):
  File "ScreenCapture.py", line 202, in 
    makeVideoUpdated(record_files, video_file)
  File "ScreenCapture.py", line 151, in makeVideoUpdated
    d = enc.encode(da)
pymedia.video.vcodec.VCodecError: Failed to encode frame( error code is 0 )

Dit is mijn code:

def makeVideoUpdated(files, outFile, outCodec='mpeg1video', info1=0.1):
    fw = open(outFile, 'wb')
    if (fw == None) :
        print "Cannot open file " + outFile
        return
    if outCodec == 'mpeg1video' :
        bitrate= 2700000
    else:
        bitrate= 9800000
    start = time.time()
    enc = None
    frame  = 1
    print "Formating "+str(len(files))+" Frames..."
    print "starting loop"
    for img in files:
        if enc == None:
            print "making encoder"
            params= {'type': 0,
          'gop_size': 12,
          'frame_rate_base': 125,
          'max_b_frames': 90,
          'height': img.get_height(),
          'width': img.get_width(),
          'frame_rate': 90,
          'deinterlace': 0,
          'bitrate': bitrate,
          'id': vcodec.getCodecID(outCodec)
        }
            enc = vcodec.Encoder(params)
            # Create VFrame
            print "Frame "+str(frame)+" process 1"
            bmpFrame= vcodec.VFrame(vcodec.formats.PIX_FMT_RGB24,
                                img.get_size(), 
                                # Covert image to 24bit RGB
                                (pygame.image.tostring(img, "RGB"), None, None)
                                )
        print "Frame "+str(frame)+" process 2"
        # Convert to YUV, then codec
        da = bmpFrame.convert(vcodec.formats.PIX_FMT_YUV420P)
        print "Frame "+str(frame)+" process 2.5"
        d = enc.encode(da) #THIS IS WHERE IT STOPS
        print "Frame "+str(frame)+" process 3"
        fw.write(d.data)
        print "Frame "+str(frame)+" process 4"
        frame += 1
    print "savng file"
    fw.close()

Kan iemand me vertellen waarom ik deze fout heb en mogelijk hoe ik dit kan oplossen? Het argument bestanden is een lijst met pygame-afbeeldingen, outFile is een pad, outCodec is standaard en info1 wordt niet meer gebruikt.

UPDATE 1 This is the code I used to make that list of pygame images.

from PIL import ImageGrab
import time, pygame
pygame.init()
f = [] #This is the list that contains the images
fps = 1
for n in range(1, 100):
    info = ImageGrab.grab()
    size = info.size
    mode = info.mode
    data = info.tostring()
    info = pygame.image.fromstring(data, size, mode)
    f.append(info)
    time.sleep(fps)
1
misschien is het probleem invoerbestand?
toegevoegd de auteur Jure C., de bron

Geen antwoorden

0