Нахождение длины mp3 файла - PullRequest
12 голосов
/ 18 мая 2011

Итак, у меня есть код:

import glob,os
import random


path = 'C:\\Music\\'
aw=[]
for infile in glob.glob( os.path.join(path,'*.mp3') ):
    libr = infile.split('Downloaded',1)



    aw.append(infile)
aww = -1
while 1:
    aww += 1
    print len(aw),aww

    random.shuffle(aw)
    awww = aw[aww]
    os.startfile(awww)

но все, что он делает, - это пройти все песни без остановки. Я подумал, что если бы я мог найти длину песни, которая воспроизводится в данный момент, я мог бы использовать модуль «время», чтобы продолжить работу после того, как песня была закончена с атрибутом (sleep). Тем не менее, я не мог найти, как получить длину песни на окнах. Кто-нибудь знает решение моей проблемы?

Ответы [ 4 ]

40 голосов
/ 18 мая 2011

Вы можете использовать мутаген , чтобы получить длину песни (см. Учебник ):

from mutagen.mp3 import MP3
audio = MP3("example.mp3")
print(audio.info.length)
6 голосов
/ 12 марта 2015

Вы можете использовать библиотеки FFMPEG:

    args=("ffprobe","-show_entries", "format=duration","-i",filename)
    popen = subprocess.Popen(args, stdout = subprocess.PIPE)
    popen.wait()
    output = popen.stdout.read()

и вывод будет:

[FORMAT]
duration=228.200515
[/FORMAT]
3 голосов
/ 17 сентября 2014

Вы также можете получить это с помощью eyed3, если это ваш вкус, выполнив:

import eyed3
duration = eyed3.load('path_to_your_file.mp3').info.time_secs

Обратите внимание, что при этом используется выборка для определения длины трека.В результате, если он использует переменную скорость передачи данных, выборки могут не быть репрезентативными для целого, и оценка может быть неверной в значительной степени (я видел, что эти оценки отклоняются более чем на 30% в судебных записях).

Я не уверен, что это намного хуже, чем другие варианты, но это то, что нужно помнить, если у вас переменная скорость передачи данных.

0 голосов
/ 10 ноября 2012

Может быть, играть также в Python, то есть не использовать os.startfile, использовать некоторую библиотеку Python для воспроизведения файла.

Я недавно написал такую ​​библиотеку / модуль, модуль musicplayer( на PyPI ). Здесь - это простой демонстрационный плеер, который вы легко можете расширить для своего кода случайного воспроизведения.

Просто выполните easy_install musicplayer.Далее приведен пример кода для получения длины:

class Song:
    def __init__(self, fn):
        self.f = open(fn)
    def readPacket(self, bufSize):
        return self.f.read(bufSize)
    def seekRaw(self, offset, whence):
        self.f.seek(offset, whence)
        return self.f.tell()

import musicplayer as mp

songLenViaMetadata = mp.getMetadata(Song(filename)).get("duration", None)
songLenViaAnalyzing = mp.calcReplayGain(Song(filename))[0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...