首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pytube if -否则

Pytube if -否则
EN

Stack Overflow用户
提问于 2022-10-17 19:23:52
回答 1查看 63关注 0票数 -1

我正在尝试为mp3转换器创建一个视频/播放列表,但目前我还不知道如何处理python。我需要一点帮助。

当我只插入一个视频链接时,它通常会下载和转换,但是当我插入播放列表链接时,它不会下载,因为命令会转到单个视频的下载命令中。

我想知道一个使用方法(如果-否则)或类似的东西,以确定它是一个播放列表,反之亦然。

我使用的代码是:

代码语言:javascript
复制
from pytube import YouTube, Playlist
from tkinter import *
from moviepy import *
import os
import re

if os.name == "nt":
    folder = f"{os.getenv('USERPROFILE')}\\Downloads"
else:
    folder = f"{os.getenv('HOME')}/Downloads"

def playlist_audio():
    get_link = link_field.get()
    p = Playlist (get_link)
    p._video_regex = re.compile(r"\"url\":\"(/watch\?v=[\w-]*a)")
    for video in p.videos:
     mp3_audio = video.streams.filter(only_audio=True).first().download(folder)
     audioconvert(mp3_audio)
        
    #
    screen.title('OK!')


def video_audio():
    get_link = link_field.get()
    screen.title('Downloading..')
    mp3_audio = YouTube(get_link).streams.filter(only_audio=True).first().download(folder)
    audioconvert(mp3_audio)

    #
    screen.title('OK!')

def audioconvert(mp3_audio):
    base, ext = os.path.splitext(mp3_audio)
    new_file = base + '.mp3'
    os.rename(mp3_audio , new_file)

screen = Tk()
title = screen.title('Python Youtube Converter Test')
Canvas = Canvas(screen, width=400, height=200)
Canvas.pack()

link_field = Entry(screen, width=50) 
link_label = Label(screen, text="Insert the url of the song or playlist:")

Canvas.create_window(200, 90, window=link_field)
Canvas.create_window(200, 70, window=link_label)

#
download_btn = Button(screen, text="Download", bg='green', padx='20', pady='5',font=('Arial', 12), fg='#fff', command=lambda:[video_audio(),playlist_audio()])
#
Canvas.create_window(200, 140, window=download_btn)

screen.mainloop()

当我插入播放列表链接时,这个过程最终不会发生(下载和转换),因为命令会转到"video_audio“定义,而不是"playlist_audio”,因为“playlist_audio”最终会产生错误。我想知道一种方法,当点击下载,程序识别它是什么类型的url,如果它只是一个视频或播放列表,从而执行正确的命令。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-18 13:28:32

由于缺少URL示例,我将假设不可能根据URL确定是使用playlist_audio还是video_audio

我建议使用“喜欢”EAFP原则。

请注意,下面的代码是一个例子。目的是演示原理,而不是提供准确的复制和粘贴解决方案。此外,使用基本异常也不是很好的实践,而且我也不熟悉Button对象及其配置。

代码语言:javascript
复制
def convert():
  try:
      video_audio()
      return True
  except:
      print("Video conversion failed, probably playlist URL")
  
  try:
      playlist_audio()
      return True
  except:
      print("Unknown error. Even playilist ULR conversion failed")

download_btn = Button(screen, text="Download", bg='green', padx='20', pady='5',font=('Arial', 12), fg='#fff', command=convert())
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74102229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档