Почему звук не воспроизводится при загрузке с помощью pytube в приложении kivy? - PullRequest
0 голосов
/ 04 августа 2020

Я работаю над приложением на основе kivy, которое может загружать видео с YouTube с помощью pytube Api. Я могу загружать видео во всех разрешениях, используя только pytube. Но когда я помещаю этот logi c в приложение Kivy, я могу скачивайте только 360p с видео и аудио. Если я выберу любое другое разрешение, оно будет загружено, но звука нет. Пожалуйста, помогите мне Как решить проблему

Мой код только с Pytube

from pytube import YouTube

url = input('Enter the link to Link download')
type1 = int(input('1.Video\n2.Audio'))
mime_type = ''
if type1 == 1:
    mime_type = 'video'
elif type1 == 2:
    mime_type = 'audio'
else:
    print('Please select appropriatly')
    exit()

type2 = int(input('1.mp4\n2.webm'))

if type2 == 1:
    mime_type += '/mp4'
elif type2 == 2:
    mime_type += '/webm'
else:
    print('Please select appropriatly')
    exit()

name = input('Name Of the file? : ')

try:
    yt = YouTube(url)
except:
    print('Couldnt connect')
    exit()

if type1 == 2:
    stream = yt.streams.filter(mime_type=mime_type).first()
    stream.download(filename=name)
    print("Download successfull")
    exit()


def resolution():
    res_query = int(input('Select Resolution\n1.144p\n2.240p\n3.360p\n4.480p\n5.720p\n6.1080p'))
    res = ''
    if res_query == 1:
        res = '144p'
    elif res_query == 2:
        res = '240p'

    elif res_query == 3:
        res = '360p'
    elif res_query == 4:
        res = '480p'

    elif res_query == 5:
        res = '720p'

    elif res_query == 6:
        res = '1080p'
    else:
        print('Enter appropriate resolution')
        exit()


res = resolution()
stream = yt.streams.filter(mime_type=mime_type, res=res)
if stream == []:
    print('Resolution of {} is not availible for download\nPlease try with different resolution')
    res = resolution()

else:
    stream.first().download(filename=name)
    print("Download successfull")

Мой загрузчик Youtube с использованием kivy Gui


from kivy.app import App
from kivy.core.window import Window
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.lang.builder import Builder
from kivy.properties import ObjectProperty
from pytube import YouTube

class Option(Screen):

    def on_pre_enter(self, *args):
        Window.clearcolor = (0.15, 0.15, 1, 1)


class Video(Screen):
    url = ObjectProperty(None)
    res=ObjectProperty(None)
    filename = ObjectProperty(None)

    def on_pre_enter(self, *args):
        Window.clearcolor = (1, 1, 1, 1)

    def Download(self):
        print(self.url.text)
        print(self.res.text)
        mime_type = 'video/mp4'

        yt=YouTube(self.url.text)
        stream = yt.streams.filter(mime_type=mime_type, res=self.res.text).first()
        stream.download(filename=self.filename.text)
        print('Download Done')




class Audio(Screen):
    url = ObjectProperty(None)
    filename=ObjectProperty(None)



    def on_pre_enter(self, *args):
        Window.clearcolor = (1, 1, 1, 1)



    def Download(self):
        print(self.url.text)

        mime_type = 'audio/mp4'
        yt = YouTube(self.url.text)
        stream = yt.streams.filter(mime_type=mime_type).first()
        stream.download(filename=self.filename.text)


class Manager(ScreenManager):
    pass


sm = ScreenManager()
kv = Builder.load_file('You.kv')


class YouApp(App):
    def build(self):
        Window.size = (360, 600)
        self.icon = r'icon.png'
        sm.add_widget(Option())
        sm.add_widget(Video())
        sm.add_widget(Audio())
        return sm


YouApp().run()

Мой kv файл

<Manager>:
    Option:
        id:option
        name:'option'
    Audio:
        id:audio
        name:'audio'
    Video:
        id:video
        name:'video'

<Option>
    name:'option'


    Widget:
        size_hint:[0.3,0.2]
        pos_hint:{'center_x':0.5,'top':0.92}

        canvas:
            Ellipse:
                size:self.size
                pos:self.pos
                source:'icon.png'


    GridLayout:
        rows:2
        size_hint:[0.8,0.27]
        pos_hint:{'center_x':0.5,'center_y':0.5}


        Button:
            text:" Download Video"
            background_color:204/255,229/255,1,1
            on_press:
                app.root.transition.direction='left'
                app.root.current='video'

        Button:
            text:"Download Audio"
            background_color:204/255,229/255,1,1
            on_press:
                app.root.transition.direction='right'
                app.root.current='audio'



<Video>
    name:'video'
    res:res
    url:url
    filename:filename
    Widget:
        size_hint:[0.3,0.2]
        pos_hint:{'center_x':0.5,'top':0.92}

        canvas:
            Ellipse:
                size:self.size
                pos:self.pos
                source:'icon.png'
    GridLayout:
        cols:2
        spacing:15
        size_hint:[0.8,0.25]
        pos_hint:{'center_x':0.5,'top':0.6}

        Label:
            text:'Url : '
            color:0,0,0,1

        TextInput:
            id :url
            multiline :False
            font_size:20

        Label:
            text:'Resolution : '
            color:0,0,0,1

        TextInput:
            id :res
            text:'360p'
            multiline :False
            font_size:20

        Label:
            text:'Video Name '
            color:0,0,0,1

        TextInput:
            id :filename
            multiline :False
            font_size:20




    Button:
        text:'Download'
        size_hint:[0.8,0.1]
        pos_hint:{'center_x':0.5,'top':0.3}
        on_press:root.Download()

    Button:
        text:'Back'
        size_hint:[0.8,0.1]
        pos_hint:{'center_x':0.5,'top':0.18}
        on_press:app.root.current='option'

<Audio>
    name:'audio'
    url:url
    filename:filename


    Widget:
        size_hint:[0.3,0.2]
        pos_hint:{'center_x':0.5,'top':0.92}

        canvas:
            Ellipse:
                size:self.size
                pos:self.pos
                source:'icon.png'
    GridLayout:
        cols:2
        spacing:15
        size_hint:[0.8,0.2]
        pos_hint:{'center_x':0.5,'top':0.6}

        Label:
            text:'Url : '
            color:0,0,0,1

        TextInput:
            id :url
            multiline :False
            font_size:20

        Label:
            text:'Audio Name '
            color:0,0,0,1

        TextInput:
            id :filename
            multiline :False
            font_size:20




    Button:
        text:'Download'
        size_hint:[0.8,0.1]
        pos_hint:{'center_x':0.5,'top':0.35}
        on_press:root.Download()

    Button:
        text:'Back'
        size_hint:[0.8,0.1]
        pos_hint:{'center_x':0.5,'top':0.18}
        on_press:app.root.current='option'

Я не понимаю, где я ошибаюсь Пожалуйста, помогите. Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...