Difference between revisions of "PowerShell: Download YouTube Video"

From DanIT
Jump to navigation Jump to search
Line 1: Line 1:
 
=Components=
 
=Components=
[[File:YouTubeDownloader Folder.png|thumb|left|Folder Layout]]
+
These parts are needed to '''Make Your Own YouTube Downloader'''</br>
These parts are needed to '''Make Your Own YouTube Downloader''':</br>
 
</br>
 
</br>
 
</br>
 
</br>
 
</br>
 
</br>
 
</br>
 
</br>
 
</br>
 
</br>
 
  
 
===Interface===
 
===Interface===
Useful to control all components from one place.</br>
+
The [[PowerShell: Download YouTube Video#Script|Download-YoutubeVideo.ps1]] script.</br>
The [[PowerShell: Download YouTube Video#Script|Download-YoutubeVideo.ps1]] script also functions as a menu.</br>
+
Useful to have a simple menu that uses all components in one place.</br>
  
 
===yt-dlp===
 
===yt-dlp===
Line 21: Line 10:
 
"yt-dlp.exe" is an [https://github.com/yt-dlp/yt-dlp open-source] command line application, and can be downloaded from: https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp.exe</br>
 
"yt-dlp.exe" is an [https://github.com/yt-dlp/yt-dlp open-source] command line application, and can be downloaded from: https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp.exe</br>
 
Needs to be regularly updated (as YouTube keeps changing the system).</br>
 
Needs to be regularly updated (as YouTube keeps changing the system).</br>
 +
 +
You can make an Update-button by creating a shortcut to: <code>\yt-dlp\yt-dlp.exe -U</code>
  
 
===FFmpeg===
 
===FFmpeg===
Line 34: Line 25:
  
 
=Script=
 
=Script=
 +
'''Folder Layout'''</br>
 +
[[File:YouTubeDownloader Folder.png||Folder Layout]]</br>
 +
 +
'''PowerShell'''</br>
 
<PRE>
 
<PRE>
 
param([string]$URL, [string]$Cookies, [string]$Formats, [string]$Location)
 
param([string]$URL, [string]$Cookies, [string]$Formats, [string]$Location)
Line 66: Line 61:
 
         Write-Host "Select Format ID(s): " -ForegroundColor Yellow -NoNewline; $Formats = Read-Host
 
         Write-Host "Select Format ID(s): " -ForegroundColor Yellow -NoNewline; $Formats = Read-Host
  
         if(!$Formats)
+
         if(!$Formats) { $Formats = 'bestvideo+bestaudio' }
        {
+
        $Args += @('--format', "$Formats")
            $Formats = 'bestvideo+bestaudio'
 
            $Args += @('--format', "$Formats")
 
        }
 
 
     }
 
     }
  

Revision as of 01:12, 18 April 2026

Components

These parts are needed to Make Your Own YouTube Downloader

Interface

The Download-YoutubeVideo.ps1 script.
Useful to have a simple menu that uses all components in one place.

yt-dlp

Required to download Video and Audio from YouTube.
"yt-dlp.exe" is an open-source command line application, and can be downloaded from: https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp.exe
Needs to be regularly updated (as YouTube keeps changing the system).

You can make an Update-button by creating a shortcut to: \yt-dlp\yt-dlp.exe -U

FFmpeg

Required to merge Video and Audio, and to convert formats.
"ffmpeg.exe" is an open-source command line application, and can be downloaded from: https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-win64-gpl.zip

Node.js

Required to simulate a JavaScript environment, so YouTube does not think you are a bot.
"node.exe" is an open-source command line application, and can be downloaded from: https://nodejs.org/en/download

Cookies

Sometimes required, as YouTube requires account identification on restricted videos or restricted client IPs.

Script

Folder Layout
Folder Layout

PowerShell

param([string]$URL, [string]$Cookies, [string]$Formats, [string]$Location)

function Download-YoutubeVideo
{
    if(!$URL)
    {
        Write-Host "`n-URL <URL>" -ForegroundColor Yellow
        Write-Host "Enter YouTube URL: " -ForegroundColor Yellow -NoNewline; $URL = Read-Host
    }

    if(!$Cookies)
    {
        Write-Host "`n-Cookies <[C]hrome> <[F]irefox> <[L]ocal> (empty to Skip)" -ForegroundColor Yellow
        Write-Host "Select Cookies: " -ForegroundColor Yellow -NoNewline; $Cookies = Read-Host

        switch -Regex ($Cookies)
        {
            '^C' { $Args += @('--cookies-from-browser', 'chrome') }
            '^F' { $Args += @('--cookies-from-browser', 'firefox') }
            '^L' { $Args += @('--cookies', 'cookies.txt') }
        }
    }

    if(!$Formats)
    {
        Write-Host "`nLoading all available formats..." -ForegroundColor Yellow
        ./yt-dlp/yt-dlp.exe --quiet --no-warnings --js-runtimes "node:$PSScriptRoot\node\node.exe" $Args --list-formats $URL

        Write-Host "`n-Formats <[Video ID] + [Audio ID]> (empty for Best video and audio)" -ForegroundColor Yellow
        Write-Host "Select Format ID(s): " -ForegroundColor Yellow -NoNewline; $Formats = Read-Host

        if(!$Formats) { $Formats = 'bestvideo+bestaudio' }
        $Args += @('--format', "$Formats")
    }

    if(!$Location)
    {
        $Location = $PSScriptRoot + '\Downloads'
        $Args += @('--paths', $Location)
    }

    Write-Host "`nDownloading started..." -ForegroundColor Yellow
    ./yt-dlp/yt-dlp.exe --js-runtimes "node:$PSScriptRoot\node\node.exe" --ffmpeg-location "$PSScriptRoot\ffmpeg\ffmpeg.exe" --merge-output-format mp4 --output '%(title)s.%(ext)s' $Args $URL

    Write-Host -ForegroundColor Green "`nDone!"

    Remove-Variable * -ErrorAction SilentlyContinue # -Exclude 'Cookies'
    Download-YoutubeVideo
}

Download-YoutubeVideo

Use

Open the Download.ps1 file, and answer the following prompts:

URL

The link of the YouTube video

Cookies

'C' for extract from Chrome
'F' for extract from Firefox
'L' for extract from local file 'cookies.txt'
Leave empty for attempt to download without cookies

Quality

Enter the ID(s) of the format(s) that you want to download from the list.
If you want to download Video and Audio and combine them, enter like: 'Video ID'+'Audio ID'.
Leave empty to automatically choose 'bestvideo+bestaudio'.