【问题标题】:How to retrieve first playlist video on youtube using youtube-dl python?如何使用 youtube-dl python 在 youtube 上检索第一个播放列表视频?
【发布时间】:2023-01-02 23:47:54
【问题描述】:

我是新来的,也是 Python 的新手。 最近我编写了如何从 youtube 转换视频的代码。

到目前为止,我的代码运行顺利。但是,因为我复制了包含播放列表视频的 url 链接,如下所示:

playlist video

它会出现这样的错误:

Error Json

Error Json

这是我的名为 App.py 的文件(仅用于检索信息视频):

from flask import Flask, request, render_template, session, url_for, redirect, send_file
from extractor import extract_video_data_from_url

app = Flask(__name__)

@app.route("/")
def index():
      return render_template('index.html')

@app.route("/download", methods=["POST"])
def download():
   video_url = request.form["video_url"]
   video_data = extract_video_data_from_url(video_url)
   return render_template("Download.html",video_data=video_data)

这是我的另一个名为 extractor.py 的文件:

import os
import json

def extract_format_data(format_data):
    extension = format_data["ext"]
    format_name = format_data["format"]
    url = format_data["url"]
    return {
        "extension": extension,
        "format_name": format_name,
        "url": url
    }
        
def extract_video_data_from_url(url):
    command = f'youtube-dl "{url}" -j'
    output = os.popen(command).read()
    video_data = json.loads(output)
    title = video_data["title"]
    formats = video_data["formats"]
    thumbnail = video_data["thumbnail"]
    formats = [extract_format_data(format_data) for format_data in formats]
    return {
        "title": title,
        "formats": formats,
        "thumbnail": thumbnail
    }

对于 /download 本身,我只将 {{video_data}} 放在我的 html 中。

我找到了另一个线程的答案,该线程必须在 extractor.py 中的 youtube-dl 语法上添加 --playlist-start 1 但仍然相同。

你们可以帮助我吗? 提前致谢

更新:实际上,当我开始下载 Short Youtube Video 时,它也无法工作。

【问题讨论】:

    标签: python youtube-dl


    【解决方案1】:

    第一张图片是 YouTube 为该视频自动生成的“混合”播放列表:

    https://www.youtube.com/watch?v=qKt_Qf1T22o&list=RDqKt_Qf1T22o

    你可以check here如何获得给定视频的“混合”。

    因为这是一个自动生成播放列表,您需要添加更多代码以了解如何获取自动生成的播放列表中的视频,然后循环播放这些视频。

    据我了解您的代码(不过我可能是错的(即视频) 里面然后给出播放列表。

    【讨论】:

    • 问题是,我只想在该播放列表中拍摄一个视频(第一个视频),而不是所有视频。但最近我有一些线索,无论什么 url 链接都包含 & 符号。它不能工作。假设播放列表包含 url youtube.com/… after &list=RDqKt_Qf1T22o&start_radio=1 cannot be read and error。
    【解决方案2】:

    我最近完成了一个 youtube 下载器,也许播放列表路线会对你有所帮助..

    为个人创建一个功能

    def download_song(video):
    # Crea un buffer de bytes para almacenar el audio
    buffer = BytesIO()
    
    # Obtiene el título de la canción y el audio en formato MP3
    name = video.title + '.mp3'
    audio = video.streams.get_audio_only()
    
    # Escribe el audio en el buffer
    audio.stream_to_buffer(buffer)
    
    # Regresa al principio del buffer
    buffer.seek(0)
    
    # Regresa el buffer como un archivo adjunto
    return buffer
    
    @app.route("/playlist_download", methods = ["POST"])
    def playlist_download():
    # Crea un buffer de bytes para almacenar el archivo ZIP
    buffer = BytesIO()
    
    # Crea un archivo ZIP en el buffer
    with ZipFile(buffer, 'w') as zip:
        # Si se hace una solicitud POST
        if request.method == 'POST':
            # Crea una instancia de Playlist con la URL de la playlist
            playlist = Playlist(session['link'])
    
            # Para cada video en la playlist
            for video in playlist.videos:
                # Descarga la canción
                song = download_song(video)
    
                # Agrega la canción al archivo ZIP
                zip.writestr(video.title + '.mp3', song.getvalue())
    
    # Regresa al principio del buffer
    buffer.seek(0)
    
    # Regresa el buffer como un archivo adjunto
    return send_file(buffer, as_attachment=True, mimetype='application/zip', download_name='playlist.zip')
    

    【讨论】:

    • 考虑到路由和函数的缩进,我在上传答案时遇到了问题,祝你好运!
    猜你喜欢
    • 1970-01-01
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    • 2018-07-03
    • 2016-06-15
    • 2013-03-18
    • 2019-06-10
    • 2013-09-19
    相关资源
    最近更新 更多