1. #1
    Membre émérite
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    janvier 2009
    Messages
    590
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : Autre

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

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

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Étudiant
    Inscrit en
    janvier 2009
    Messages
    590
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : Autre

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

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

    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.

Discussions similaires

  1. [Débutant] Durée d'un fichier video avec vlc.
    Par Hybride76 dans le forum VB.NET
    Réponses: 2
    Dernier message: 05/11/2012, 16h04
  2. Réponses: 2
    Dernier message: 05/01/2012, 21h38
  3. comment créer une video avec des images tif
    Par omarooo dans le forum Images
    Réponses: 1
    Dernier message: 12/10/2011, 12h07
  4. lecture d'une video avec pymedia
    Par vikki dans le forum Programmation multimédia/Jeux
    Réponses: 2
    Dernier message: 18/09/2008, 23h16
  5. Traitements d'image sur PNG avec transparence
    Par Ingham dans le forum Langage
    Réponses: 16
    Dernier message: 02/08/2004, 16h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo