>

youtube-dl (프론트 엔드 다운로드-WEB UI)을 통해 YouTube 및 기타 웹 사이트 비디오 및 오디오 파일을 다운로드하는 방법

프론트 엔드를 통해 비디오를 검색하고 다운로드하십시오.

필자는 파이썬과 플라스크입니다-

   from flask import (
    Flask, Response,
    render_template,
    request,
    redirect,
    flash,
    url_for,
    send_file,
    session,
)
import subprocess
from ydl import get_media, verify, fetch_name
from zipper import zipping
import os
app = Flask(__name__)
app.secret_key = "supposed to be a secret"

@app.route("/return-file/") 
def return_file():
    import pdb
    #pdb.set_trace()
    num_choice = session.get("choice")
    filename = session.get("filename")
    url = session.get("url")
    if num_choice == 1:
        filename_formatted = filename + ".mp3"
        location = "media/Audio downloads/{}.mp3".format(session.get("id"))
    if num_choice == 2:
        #filename_formatted = filename + ".mp4"
        #cc = get_media(url, num_choice)
        print(url)
        print('==============================================================================')
        #"youtube-dl", "--get-url", url
        #subprocess.run(["youtube-dl", "--no-check-certificate", "--get-url", url])
        #subprocess.run(["youtube-dl", "--no-check-certificate", url])
        test = subprocess.run(["youtube-dl", "--no-check-certificate", "--get-filename", url])
        print(test)
        csv = '1,2,3\n4,5,6\n'
        return Response(
            csv, 
            mimetype="text/csv",
            headers={"Content-disposition":
                    "attachment; filename=test"})
        #return send_file('', attachment_filename="myplot.csv")
        print('==============================================================================')
        #subprocess.run(["youtube-dl", "--no-check-certificate", url])
        #location = "media/{}.mp4".format(session.get("id"))
        #if os.path.isdir(location):
            #print('True')

    if num_choice == 3 or num_choice == 4:
        filename_formatted = filename + ".zip"
        location = "media/{}.zip".format(session.get("id"))
    #return send_file(
        #location, attachment_filename=filename_formatted, as_attachment=True
    #)

@app.route("/", methods=["GET", "POST"])
def home_page():
    """
    Displaying homepage
    """
    title = "YDL | YouTube Downloader"
    if request.method == "POST":
        attempted_url = request.form["url"]
        attempted_choice = int(request.form["submit"])
        title = [attempted_url, attempted_choice]
        if attempted_url != "":
            if verify(attempted_url):
                result_id = get_media(attempted_url, attempted_choice)
                session["url"] = attempted_url
                session["id"] = result_id
                session["choice"] = attempted_choice
                filename = fetch_name(attempted_url)
                session["filename"] = filename
                # return render_template('material-life.html', title = "Success {}".format(title))
                # return render_template('material-life.html', title = result_id)
                return redirect(url_for("return_file"))
            else:
                return render_template(
                    "material-life.html", title="YDL | Doesn't belong to YouTube"
                )
        else:
            return render_template(
                "material-life.html", title="YDL | URL shouldn't be empty"
            )
    return render_template("material-life.html", title=title)

@app.errorhandler(404)
def page_not_found(error):
    """
    for anyone trying different links or searching for images within the server
    """
    return (
        render_template(
            "error_template.html",
            title="404 bud",
            message="Time to make the chimi-fuckin'-changas. ",
            subline="404, not there",
            image_location=url_for("static", filename="images/deadpool-funny.jpg"),
        ),
        404,
    )

@app.errorhandler(400)
def bad_request(error):
    """
    For handling situations where the server doesn't know what to do with the browser's request
    """
    return (
        render_template(
            "error_template.html",
            title="Aaaah ...",
            message="나는 이해하지 못한다.",
            subline="Yeah, the server couldn't understand what you asked for, Sorry",
            image_location=url_for("static", filename="images/simpson-gangam.jpg"),
        ),
        400,
    )

if __name__ == "__main__":
    app.run(debug=True)

  • 콘솔 기본 다운로드 작업 중 ... 프런트 엔드를 통해 다운로드하고 싶습니다 ... 저장하지 않고 직접 다운로드

  • 답변 # 1

    pytube 를 사용할 수 있습니다   youtube-dl 에 의존하는 모듈 . 앱을 만드는 것 같지만 동영상 URL을 사용하면 아래의 한 줄짜리 라이너를 사용하여 동영상을 다운로드 할 수 있습니다.

    from pytube import YouTube    
    YouTube(video_url).streams.first().download(filename='file_name')
    
    

관련 자료

  • 이전 Django 외래 키 필드에 추가하는 방법
  • 다음 java - JUnit에서 setUp ()이 호출되지 않습니다