[PyQt5 ]建立GUI 通過 yt-dlp來下載 YT

閱讀時間約 10 分鐘

本篇文章將帶你一步步建立一個簡單的 PyQt5 GUI 應用程式,通過 yt-dlp 來下載 YT 視頻。你可以在這個應用中輸入視頻的 URL,並即時看到下載進度。


GUI介面

raw-image

下載到開啟的資料夾路徑

raw-image

前置條件

在開始之前,請確保你已經安裝了以下軟體和庫:

  1. 安裝 Python 確保你的系統安裝了 Python(3.7 及以上版本)。你可以在命令行中輸入以下命令來檢查版本:
    python --version
    若未安裝,可以前往 Python 官方網站 下載並安裝。
  2. 安裝 PyQt5 PyQt5 是 Python 的一個圖形界面庫,允許你創建桌面應用。使用以下命令安裝:
    pip install pyqt5
  3. 安裝 yt-dlp yt-dlp 是一個強大的視頻下載工具,可以用來下載 YouTube 和其他網站上的視頻。使用以下命令安裝:
    pip install yt-dlp

程式設計:建立 PyQt5 下載器

以下是程式碼,將展示如何使用 PyQt5 創建一個簡單的 GUI 下載工具,並結合 yt-dlp 來下載視頻。

import sys
from PyQt5.QtWidgets import QApplication, QVBoxLayout, QLineEdit, QPushButton, QLabel, QWidget
from PyQt5.QtCore import QThread, pyqtSignal
import subprocess

class DownloadThread(QThread):
update_label = pyqtSignal(str)

def __init__(self, url, parent=None):
super().__init__(parent)
self.url = url

def run(self):
try:
self.update_label.emit("正在處理...") # 初始狀態
# 使用 yt-dlp 下載
process = subprocess.Popen(
['yt-dlp', '--progress', '--newline', self.url], # 啟動 yt-dlp 進行下載
stdout=subprocess.PIPE, # 捕獲標準輸出
stderr=subprocess.PIPE, # 捕獲錯誤輸出
text=True # 開啟文本模式
)
# 實時捕獲輸出,並將其更新到 UI
for line in process.stdout:
self.update_label.emit(line.strip())
process.wait() # 等待下載完成

# 判斷下載是否成功
if process.returncode == 0:
self.update_label.emit("下載完成!")
else:
self.update_label.emit("下載失敗,請檢查網址是否正確。")
except Exception as e:
self.update_label.emit(f"錯誤:{e}") # 顯示錯誤信息

class DownloadApp(QWidget):
def __init__(self):
super().__init__()
self.init_ui()

def init_ui(self):
self.setWindowTitle("YT 下載器") # 設定視窗標題

layout = QVBoxLayout() # 垂直布局

# 輸入框
self.url_input = QLineEdit(self)
self.url_input.setPlaceholderText("請輸入YT視頻網址") # 提示文本
layout.addWidget(self.url_input)

# 下載按鈕
self.download_button = QPushButton("下載", self)
self.download_button.clicked.connect(self.start_download) # 按下按鈕時觸發下載
layout.addWidget(self.download_button)

# 狀態標籤
self.status_label = QLabel("狀態:等待輸入網址", self)
layout.addWidget(self.status_label)

self.setLayout(layout)

def start_download(self):
url = self.url_input.text().strip() # 獲取輸入的網址
if not url:
self.status_label.setText("狀態:請輸入有效的網址") # 若網址無效,顯示提示
return

self.status_label.setText("狀態:正在處理...") # 顯示正在處理的訊息
# 創建下載線程,並開始下載
self.download_thread = DownloadThread(url)
self.download_thread.update_label.connect(self.update_status) # 更新 UI
self.download_thread.start()

def update_status(self, message):
self.status_label.setText(f"狀態:{message}") # 顯示當前狀態

if __name__ == "__main__":
app = QApplication(sys.argv)
window = DownloadApp()
window.resize(400, 200) # 設定視窗大小
window.show() # 顯示視窗
sys.exit(app.exec_()) # 進入主事件循環

程式碼說明

1. 下載線程 (DownloadThread)

  • DownloadThread 類別繼承自 QThread,負責執行視頻下載任務。使用 yt-dlp 命令行工具下載視頻,並通過 stdout 實時捕獲下載過程的輸出。
  • 當下載過程有輸出時,它會觸發 update_label 信號,更新 UI 上的標籤顯示下載進度或錯誤訊息。

2. 主要應用 (DownloadApp)

  • DownloadApp 類別是應用的主界面,包含一個輸入框(QLineEdit)、一個下載按鈕(QPushButton)和一個顯示下載狀態的標籤(QLabel)。
  • 用戶輸入視頻的 URL,並按下下載按鈕後,啟動下載線程。下載過程中的信息會通過信號更新顯示。

3. 使用 yt-dlp 下載視頻

  • 使用 subprocess.Popen 啟動 yt-dlp 下載視頻,並實時捕獲輸出來更新下載進度。
  • 支援進度條、錯誤訊息顯示等功能。

使用方法

  1. 執行程式後,輸入 YouTube 視頻的 URL。
  2. 點擊「下載」按鈕,開始下載。
  3. 下載過程會顯示在界面上的標籤中,並且會顯示進度。

注意事項

  • 合法性:請遵守版權法規,僅下載授權或許可的視頻內容。支持正版,並僅將此工具用於學習或個人用途。
  • 錯誤處理:如果 yt-dlp 遇到無法處理的視頻,會顯示錯誤訊息,並請檢查網址是否正確。
120會員
203內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
留言0
查看全部
發表第一個留言支持創作者!
螃蟹_crab的沙龍 的其他內容
使用 yt-dlp 下載 YT的教學 yt-dlp 是一款強大的命令行工具,用於下載來自 YT 及其他流媒體平台的音視頻資源。 本篇文章將參考yt-dlp github上 如何使用 yt-dlp 快速下載。 一、什麼是 yt-dlp? yt-dlp 是 youtube-dl 的分支項目,具
要讓滑鼠光標根據不同的繪圖模式改變形狀,可以使用 PyQt 的 QCursor 類來設置不同的滑鼠光標圖標。 假設是要畫ROI在畫布上,這樣當切換到矩形、圓形、筆等不同模式時,滑鼠光標會變為對應的圖標。 以下是如何實現這種效果的步驟: 定義光標變化的方法:根據不同的模式設置相應的光標,例如十字
在 PyQt 的應用程式中,我們經常需要追蹤滑鼠位置,尤其是在建立繪圖工具或處理繪圖邊界的情況下。以下是如何檢測滑鼠在畫布內外狀態的教學,並包含滑鼠事件處理及邊界判斷的細節。 目標 監測滑鼠進入與離開畫布的狀態,當滑鼠進入畫布範圍內時啟動繪製,而當滑鼠超出範圍時記錄最後一個有效位置。 實現邊
進一步探討 PyQt5 的一些進階功能,具體包括如何使用更多的控件如 QComboBox(下拉框)、QTableWidget(表格),如何使用 QMainWindow 建立多窗口應用,及如何自訂樣式和設計。 1. 使用 QComboBox(下拉框) QComboBox 是一個下拉框控件,用來顯示
以下是一個關於 PyQt5 基礎教學的簡單入門文,帶你一步步了解如何從零開始建立 PyQt5 應用程序。 1. 安裝 PyQt5 首先,確保你安裝了 PyQt5 庫。打開終端或命令提示符,輸入以下命令進行安裝: pip install pyqt5 2. 建立最簡單的 PyQt5 應用程序
使用 yt-dlp 下載 YT的教學 yt-dlp 是一款強大的命令行工具,用於下載來自 YT 及其他流媒體平台的音視頻資源。 本篇文章將參考yt-dlp github上 如何使用 yt-dlp 快速下載。 一、什麼是 yt-dlp? yt-dlp 是 youtube-dl 的分支項目,具
要讓滑鼠光標根據不同的繪圖模式改變形狀,可以使用 PyQt 的 QCursor 類來設置不同的滑鼠光標圖標。 假設是要畫ROI在畫布上,這樣當切換到矩形、圓形、筆等不同模式時,滑鼠光標會變為對應的圖標。 以下是如何實現這種效果的步驟: 定義光標變化的方法:根據不同的模式設置相應的光標,例如十字
在 PyQt 的應用程式中,我們經常需要追蹤滑鼠位置,尤其是在建立繪圖工具或處理繪圖邊界的情況下。以下是如何檢測滑鼠在畫布內外狀態的教學,並包含滑鼠事件處理及邊界判斷的細節。 目標 監測滑鼠進入與離開畫布的狀態,當滑鼠進入畫布範圍內時啟動繪製,而當滑鼠超出範圍時記錄最後一個有效位置。 實現邊
進一步探討 PyQt5 的一些進階功能,具體包括如何使用更多的控件如 QComboBox(下拉框)、QTableWidget(表格),如何使用 QMainWindow 建立多窗口應用,及如何自訂樣式和設計。 1. 使用 QComboBox(下拉框) QComboBox 是一個下拉框控件,用來顯示
以下是一個關於 PyQt5 基礎教學的簡單入門文,帶你一步步了解如何從零開始建立 PyQt5 應用程序。 1. 安裝 PyQt5 首先,確保你安裝了 PyQt5 庫。打開終端或命令提示符,輸入以下命令進行安裝: pip install pyqt5 2. 建立最簡單的 PyQt5 應用程序
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
上兩篇有關List的文章,此篇文上兩章的延續,整理一些常用的方法和操作。 [Python]List(列表)新增、修改、刪除元素 [Python基礎]容器 list(列表),tuple(元組) 還有一些常用的 list 方法和操作,讓你能更靈活地處理列表數據
Thumbnail
訊息的即時傳遞已然成為現代社會的趨勢了, 影音也是如此, 即時! 即時! 即時! 已經是目前使用者體驗的必要元素了, 在這邊我們要分享的主題是如何在python程式語言的情境下使用ffmpeg來將音檔串流的轉換格式, 為什麼會有這樣的需求呢? 因為我們處理音檔時可能會需要統一輸出的格式, 當然背後也
Thumbnail
打開 jupyter notebook 寫一段 python 程式,可以完成五花八門的工作,這是玩程式最簡便的方式,其中可以獲得很多快樂,在現今這種資訊發達的時代,幾乎沒有門檻,只要願意,人人可享用。 下一步,希望程式可以隨時待命聽我吩咐,不想每次都要開電腦,啟動開發環境,只為完成一個重複性高
Thumbnail
在離線環境需要安裝Python套件時就相當的麻煩,需要先下載好套件包,在打指令安裝,若套件數量一多時就會相當麻煩。 本文將介紹如何利用兩行指令快速的安裝整個資料夾的套件。
from win32com.client import Dispatch path = "D:\PROGRAMMING\PythonCode\pypptx\image1.png" # 启动PowerPoint应用程序 ppt = Dispatch('PowerPoint.Applicatio
Thumbnail
本文利用pyqt5,使用pyttsx3將QLineEdit(單行輸入框)的字串,轉成語音呈現出來。
Thumbnail
進入Lua的第一步! 安裝和執行
Thumbnail
解決 setuptools 的問題: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools. 解決方法 目前
Thumbnail
python Streamlit連動github程式碼實現YoloV8網頁版偵測物件 先致敬,YoloV8原作Github程式碼 Streamlit網頁 實現YoloV8 偵測物件 套用模型為YoloV8(YOLOv8n)最小模型,因github上傳檔案最大上限為25mb 導入圖像(搜尋街景
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
上兩篇有關List的文章,此篇文上兩章的延續,整理一些常用的方法和操作。 [Python]List(列表)新增、修改、刪除元素 [Python基礎]容器 list(列表),tuple(元組) 還有一些常用的 list 方法和操作,讓你能更靈活地處理列表數據
Thumbnail
訊息的即時傳遞已然成為現代社會的趨勢了, 影音也是如此, 即時! 即時! 即時! 已經是目前使用者體驗的必要元素了, 在這邊我們要分享的主題是如何在python程式語言的情境下使用ffmpeg來將音檔串流的轉換格式, 為什麼會有這樣的需求呢? 因為我們處理音檔時可能會需要統一輸出的格式, 當然背後也
Thumbnail
打開 jupyter notebook 寫一段 python 程式,可以完成五花八門的工作,這是玩程式最簡便的方式,其中可以獲得很多快樂,在現今這種資訊發達的時代,幾乎沒有門檻,只要願意,人人可享用。 下一步,希望程式可以隨時待命聽我吩咐,不想每次都要開電腦,啟動開發環境,只為完成一個重複性高
Thumbnail
在離線環境需要安裝Python套件時就相當的麻煩,需要先下載好套件包,在打指令安裝,若套件數量一多時就會相當麻煩。 本文將介紹如何利用兩行指令快速的安裝整個資料夾的套件。
from win32com.client import Dispatch path = "D:\PROGRAMMING\PythonCode\pypptx\image1.png" # 启动PowerPoint应用程序 ppt = Dispatch('PowerPoint.Applicatio
Thumbnail
本文利用pyqt5,使用pyttsx3將QLineEdit(單行輸入框)的字串,轉成語音呈現出來。
Thumbnail
進入Lua的第一步! 安裝和執行
Thumbnail
解決 setuptools 的問題: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools. 解決方法 目前
Thumbnail
python Streamlit連動github程式碼實現YoloV8網頁版偵測物件 先致敬,YoloV8原作Github程式碼 Streamlit網頁 實現YoloV8 偵測物件 套用模型為YoloV8(YOLOv8n)最小模型,因github上傳檔案最大上限為25mb 導入圖像(搜尋街景