0

Here is my code:

#!/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")

The time of pokemon theme song youtube video is: 3 minutes and 21 seconds.

The same information from file properties: Pokemon song time information

But print(audiofile.info.time_secs)

Prints out 405.62361067503923. That's wrong, so the calculation audiofile_duration = time.strftime('%H:%M:%S', time.gmtime(audiofile.info.time_secs)) is also wrong.

How can i fix that? Thanks in advance, Chris Pappas

Edit:

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']
Chris P
  • 2,059
  • 4
  • 34
  • 68

1 Answers1

0

I found the solution here:

Finding the length of an mp3 file

But if it not possible to use so many libraries feel free for another answer.

Chris P
  • 2,059
  • 4
  • 34
  • 68