Найти длительность mp3 - python - PullRequest
0 голосов
/ 23 апреля 2020

Вот мой код:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from pydub import AudioSegment
import os
from urllib.parse import urlparse, parse_qs, unquote
from pytube import YouTube# misc
import urllib.request
from moviepy.editor import *
import eyed3
import time

class ConvertToMp3:

    def convert(self,filename):

        path_list = filename.split("/")
        filename = path_list[len(path_list)-1]
        path_list.remove(filename)
        if(len(path_list)!=0 and path_list[0]==""):
            path_list.remove(path_list[0])
        path = ""

        for folder in path_list:
            path = path+"/"+folder

        extension = filename.split(".")[1]

        if path!="":
            audio = AudioSegment.from_file(path+"/"+filename, format=extension)
        else:
            audio = AudioSegment.from_file(filename, format=extension)
        audio.export("output files/"+filename.split(".")[0]+".mp3", format="mp3")

class ConvertFromYoutube:
    def download(self,video_url,**options):
        video_id = parse_qs(urlparse(video_url).query)['v'][0]
        video = YouTube('https://www.youtube.com/watch?v='+video_id)
        video.streams.get_by_itag(18).download("output files")
        title = video.title
        #print(title)
        thumbnail = video.thumbnail_url
        thumbnail_extension = thumbnail.split(".")
        thumbnail_extension = thumbnail_extension[len(thumbnail_extension)-1]
        urllib.request.urlretrieve(thumbnail, "output files/"+title+"."+thumbnail_extension)
        self.save_as_mp3(title,"song_artist","song_album","song_album_artist","*****")

    def save_as_mp3(self,song_title,song_artist,song_album,song_album_artist,song_rating):
        video = VideoFileClip(os.path.join("output files",song_title+".mp4"))
        video.audio.write_audiofile(os.path.join("output files",song_title+".mp3"))
        audiofile = eyed3.load(os.path.join("output files",song_title+".mp3"))
        audiofile.tag.artist = song_artist
        audiofile.tag.album = song_album
        audiofile.tag.album_artist = song_album_artist
        audiofile.tag.title = song_title
        print(audiofile.info.time_secs)
        audiofile_duration = time.strftime('%H:%M:%S', time.gmtime(audiofile.info.time_secs))
        print(audiofile.info.time_secs)
        print(audiofile_duration)
        audiofile.tag.save()

#test
#converter = ConvertToMp3()
#converter.convert("/home/chris/Μουσική/Απολυτίκιο Τριών Ιεραρχών.wav")

youtube = ConvertFromYoutube()
youtube.download("https://www.youtube.com/watch?v=JuYeHPFR3f0")

Время воспроизведения видео на YouTube с темой покемонов: 3 минуты 21 секунда.

Та же информация из свойств файла: Pokemon song time information

Но print(audiofile.info.time_secs)

Распечатывает 405.62361067503923. Это неправильно, поэтому расчет audiofile_duration = time.strftime('%H:%M:%S', time.gmtime(audiofile.info.time_secs)) также неверен.

Как я могу это исправить? Заранее спасибо, Крис Паппас

Редактировать:

object_methods = [attr for attr in dir(audiofile.info) if not callable(getattr(audiofile.info, attr)) and not attr.startswith("__")]
        print(object_methods)

['bit_rate', 'bit_rate_str', 'lame_tag', 'mode', 'mp3_header', 'sample_freq', 'size_bytes', 'time_secs', 'vbri_header', 'xing_header']

1 Ответ

0 голосов
/ 24 апреля 2020

Я нашел решение здесь:

Поиск длины файла mp3

Но если невозможно использовать так много библиотек, не стесняйтесь для другого ответа.

...