IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation multimédia/Jeux Python Discussion :

Connaître la durée exacte d'un fichier MP3


Sujet :

Programmation multimédia/Jeux Python

  1. #1
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 751
    Points
    1 751
    Par défaut Connaître la durée exacte d'un fichier MP3
    Voilà tout est dans le titre.

    Toute info. est la bienvenue.

  2. #2
    Membre éclairé
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Points : 773
    Points
    773
    Par défaut
    Çà va pas t'aider énormément (voir pas du tout), mais t'as regardé du côté de pyMedia ? Le manque de documentation à fait que je m'en suis vite désintéressé, mais comme on peut lire entre-autres les mp3, doit dûrement bien avoir un truc te donnant des infos dessus... Au pire, ouvre ton mp3 directement via open et... et... ben bon courage pour trouver la façon de calculer la durée depuis les données brutes .

    doit bien y avoir des infos dans ces données brutes concernant le bitrate, et de là, pourquoi ne pas trouver la relation avec la taille du fichier, pour en déduire la durée ? Enfin, si le bitrate est variable, ça fout le concept en l'air...

  3. #3
    Membre averti Avatar de alexdevl
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 265
    Points : 344
    Points
    344
    Par défaut
    Bonjour,
    J'avais fait une applic pour grouper tout les mp3 d'un répertoire dans un seul fichier (c'était du wx.). a voir si cela peux t'aider.

    La fontion :

    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
    67
    68
    69
    70
    71
     
        def groupMp3( self,repSource, nomFichierDest ): # Regroupe les fichiers de repSource dans nomFichierDest
            import pymedia.audio.acodec as acodec
            import pymedia.muxer as muxer
            type="mp3"
            bitrate= None
            g=glob.glob(os.path.join(str(repSource),"*.mp3"))
            l=0
            gSansDest=[]
            for f in g:
                if f<>nomFichierDest :
                    l=l++os.path.getsize(f)
                    gSansDest.append(f)
     
            self.gauge_01.SetRange(l)
     
            # Open demuxer
            fw= open(nomFichierDest, 'wb')
            for ind,fName in enumerate(gSansDest):
                self.text_ctrl_3.SetLabel("Traitement de "+fName+" ( "+str(ind+1)+" / "+str(len(gSansDest))+" )")
     
                if fName<>nomFichierDest:
                    dm= muxer.Demuxer( fName.split( '.' )[ -1 ].lower() )
                    f= open( fName, 'rb' )
                    s= f.read( 90000 )
                    dec= enc= mx= None
     
                    while len( s ):
     
                        frames= dm.parse( s )
                        if frames:
                            for fr in frames:
                                # Assume for now only audio streams
                                if dec== None:
                                    # Open decoder
                                    dec= acodec.Decoder( dm.streams[ fr[ 0 ] ] )
                                    #print 'Decoder params:', dm.streams[ fr[ 0 ] ]
     
                                # Decode audio frame
                                r= dec.decode( fr[ 1 ] )
                                if r:
                                    if bitrate== None:
                                        bitrate= r.bitrate
     
                                  # Open muxer and encoder
                                if enc== None:
                                    params= { 'id': acodec.getCodecID(type),
                                              'bitrate': bitrate,
                                              'sample_rate': r.sample_rate,
                                              'channels': r.channels }
                                    #print 'Encoder params:', params
                                    mx= muxer.Muxer( type )
                                    stId= mx.addStream( muxer.CODEC_TYPE_AUDIO, params )
                                    enc= acodec.Encoder( params )
     
                                    ss= mx.start()
                                    fw.write(ss)
     
                                enc_frames= enc.encode( r.data )
                                if enc_frames:
                                    for efr in enc_frames:
                                        ss= mx.write( stId, efr )
                                        if ss:
                                            self.gauge_01.SetValue(os.path.getsize(nomFichierDest))
                                            self.Update()
                                            fw.write(ss)
     
                        s= f.read( 100000 )
     
                    f.close()
            fw.close()

  4. #4
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 751
    Points
    1 751
    Par défaut
    Merci, mais en fait la dernière fois que j'ai essayé d'utiliser pyMédia, cela n'a pas fonctionné.

    Sinon je suis tombé sur ce blog qui présente le projet suivant : http://hachoir.org/wiki/hachoir-metadata .

    Je vais essayer de le faire fonctionner.

  5. #5
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 751
    Points
    1 751
    Par défaut
    En fait en regardant mes précédents posts, on m'avait donner une méthode légère avec la réponse : http://www.developpez.net/forums/d63...s-fichier-mp3/ .

    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
    67
    68
    69
    70
    71
    #! /usr/bin/env python
    # -*- coding: utf-8 -*-
    # http://code.google.com/p/quodlibet/wiki/Mutagen
     
    import mutagen.mp3
    import mutagen.oggvorbis
    from mutagen.easyid3 import EasyID3
     
    def get_info(f, item):
        """ En parallele a get_tag() """
        try:
            return f[item][0]
        except:
            return ""
     
    def get_tag(path):
        """ Obtention des tags mp3 ou ogg """
        ext = path[-3:]
        flag = 'on'
     
        # Tag du MP3
        if ext == 'mp3':
            zik = mutagen.mp3.MP3(path)
            try:
                f = EasyID3(path)
            except:
                flag = 'off'   
        # Tag du OGG
        if ext == 'ogg':
            zik = mutagen.oggvorbis.OggVorbis(path)
            f = zik
     
        # Info sur le fichier musical
        length = str(int(zik.info.length))
        bitrate = str(int(zik.info.bitrate / 1024))
        sample_rate = str(zik.info.sample_rate / 1000.)
     
        # Obtention des tags
        if flag != 'off':
            album = get_info(f, 'album')
            title = get_info(f, 'title')
            artist = get_info(f, 'artist')
            genre = get_info(f, 'genre')
            composer = get_info(f, 'composer')
            date = get_info(f, 'date')
            tracknumber = get_info(f, 'tracknumber')
        else:
            album = 'unknown'
            title = 'unknown'
            artist = 'unknown'
            genre = 'unknown'
            composer = 'unknown'
            date = 'unknown'
            tracknumber = 'unknown'
     
        rep={}
        rep['artist']=artist
        rep['album']=album
        rep['title']=title
        rep['bitrate']=bitrate
        rep['sample_rate']=sample_rate
        rep['duree en s']=length
        rep['genre']=genre
        rep['composer']=composer
        rep['date']=date
        rep['tracknumber']=tracknumber
     
        return rep
     
    path = 'Test_MP3.mp3'
    print get_tag(path)
    Je me fais vieux...

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

Discussions similaires

  1. Calcul de la durée d'un fichier MP3
    Par pearlvsalice dans le forum Langage
    Réponses: 4
    Dernier message: 12/11/2009, 09h09
  2. ID3 ==> Durée d'un fichier MP3
    Par nabmoah dans le forum Langage
    Réponses: 1
    Dernier message: 22/10/2008, 20h38
  3. Durée d'un fichier MP3
    Par Duffyduff dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/06/2008, 19h02
  4. Commande pour connaître la durée d'un fichier audio et d'un fichier video
    Par Math66 dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 12/06/2007, 10h15
  5. Réponses: 3
    Dernier message: 25/07/2002, 10h42

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