Soutenez-nous
Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Membre émérite
    Avatar de afranck64
    Homme Profil pro Franck Awounang N.
    Étudiant
    Inscrit en
    janvier 2009
    Messages
    590
    Détails du profil
    Informations personnelles :
    Nom : Homme Franck Awounang N.
    Âge : 22
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : janvier 2009
    Messages : 590
    Points : 923
    Points
    923

    Par défaut Pymedia: Images ==> Video avec duree prédéfine

    Bonjour,
    j'aimerai utiliser le module Pymedia pour confectionner une Vidéo à base d'images. J'ai déjà un bout de code, mais avec je n'obtient pas la durée souhaitée. Si une personne pouvait prendre la peine de jetter un coup d'oeil à ce code et m'aider à le retoucher comme il faut ce serait génial.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    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()
    Merci d'avance à tous ceux qui prendront la peine de lire mon post (et de tester le code!)
    Win 7 HP 64 bits /Ubuntu 12.04, - AMD A6 Quad: Py32 / Py27
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tuto, Web, ...)
    - Tests déjà effectués

  2. #2
    Membre émérite
    Avatar de afranck64
    Homme Profil pro Franck Awounang N.
    Étudiant
    Inscrit en
    janvier 2009
    Messages
    590
    Détails du profil
    Informations personnelles :
    Nom : Homme Franck Awounang N.
    Âge : 22
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : janvier 2009
    Messages : 590
    Points : 923
    Points
    923

    Par défaut

    Bonjour,
    problème résolu.
    Pour se faire, j'ai fixé le frame_rate à 24.
    Ensuite je crée une liste de taille, le nombre d'images à convertir, ou chaque id correspondant à une image contient le nombre de fois que l'image doit rentrer dans la vidéo.
    Et de plus, j'incrémente le temps demandé par l'utilisateur de 1. Pour que cela produise la durée voulue.

    Et à la fin:
    Win 7 HP 64 bits /Ubuntu 12.04, - AMD A6 Quad: Py32 / Py27
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tuto, Web, ...)
    - Tests déjà effectués

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •