Video gruenden mit bilder un Pymedia

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
afranck64
User
Beiträge: 3
Registriert: Dienstag 3. Mai 2011, 17:06

Hallo ,
ich ,ha,be viel Bilder und moechte damit eine video gruenden. Dafuer moechte ich einen Programm gruenden der Pymedia nutzt. Leider kenne ich mich nicht gut damit.
Ich moechte aucht die Dauert der Video setzen koennen.

Dank :mrgreen:
afranck64
User
Beiträge: 3
Registriert: Dienstag 3. Mai 2011, 17:06

Hallo,
hier ist was ich schon gemacht habe. Aber die Dauert funktionniert nicht gut. Wenn ich z.B 60 Sekunden setze, dann dauert die Video nur c.a 50 Sekunden.

Code: Alles auswählen

def BuildVideo ( images,output_filename,size,time=60 ):
    '''Construit une vidéo à partir de la liste d'images.
       images          : liste des noms de fichiers des images
       output_filename : nom de la video (attention à l'extension)
       size            : (largeur,hauteur) en pixels de la vidéo générée
       Les paramètres du codec sont ceux trouvés dans les tutoriels de pymedia.
       '''
    nb_images = 1
    if len(images)>1:
        nb_images = len(images)
    elif nb_images>=time: 
        frame_rate_base = 1567641600/nb_images
        frame_rate = frame_rate_base*nb_images/time
        rate = frame_rate/frame_rate_base
        params = {
                  'type'            : 0,
                  'gop_size'        : 12,
                  # frame rate = frame_rate/frame_rate_base : ici déterminer par la duree et le nb d'images
                  # attention : tous les frames rate ne sont pas supportés
                  'frame_rate'      : frame_rate_base*nb_images/time,
                  'frame_rate_base' : frame_rate_base,
                  'max_b_frames'    : 0,
                  'height'          : size[1],
                  'width'           : size[0],
                  'deinterlace'     : 0,
                  'bitrate'         : 2700000,
                  'id'              : vcodec.getCodecID( 'mpeg1video' ) }
 
        #Lorsqu'il y a peu d'images cela pose quelques problèmes
    else:
        rate = 1
        params = {
                  # frame rate = frame_rate/frame_rate_base : ici = 1 im/sec
                  # attention : tous les frame rate ne sont pas supportés
                  'frame_rate'      : 1,
                  'frame_rate_base' : 1,
                  'max_b_frames'    : 0,
                  'height'          : size[1],
                  'width'           : size[0],
                  'deinterlace'     : 0,
                  'bitrate'         : 2700000,
                  'id'              : vcodec.getCodecID( 'mpeg1video' ) }
 
        tmp = [images[0]]
        for i in range(time):
            pos = i*nb_images/time
            tmp.append(images[pos])
        images = tmp
 
    encoder = vcodec.Encoder( params ) # créé une instance d'encodeur
    output = open( output_filename,'wb' ) # créé le fichier de sortie
 
    for i,im in enumerate(images) :
        # recupère l'image sous forme d'une string raw
        bitmap    = Image.open( im ).resize( size ).tostring()
        # en fait une frame rgb
        frame_rgb = vcodec.VFrame( vcodec.formats.PIX_FMT_RGB24,size,( bitmap,None,None ))
        f = frame_rgb
        # la convertit en frame yuv (l'encodeur n'accepte pas directement du rgb)
        frame_yuv = frame_rgb.convert( vcodec.formats.PIX_FMT_YUV420P )
        # encode la frame
        encoded   = encoder.encode( frame_yuv )
        # ajoute la frame encodée au fichier
        output.write( encoded.data )
    # ferme le fichier de sortie
    output.close()
Ich hoffe die Leute werden das Code ueberpruefen. :mrgreen:
<images> ist eine List von <PIL.Image>
Antworten