Difference between revisions of "PowerShell: Download YouTube Video"

From DanIT
Jump to navigation Jump to search
m (Dan moved page PowerShell: Download Youtube Video to PowerShell: Download YouTube Video without leaving a redirect)
Line 1: Line 1:
=Overview=
+
=Components=
Long story short, YouTube makes it not so easy to download their videos.</br>
+
These parts are needed to '''Make Your Own YouTube Downloader''':</br>
So regardless what application you use to download, it is always going to require or include the following base components:</br>
 
  
==='yt-dlp'===
+
===Interface===
yt-dlp.exe is a command line application to download from YouTube, and needs to be regularly updated (as YouTube keeps changing the system).</br>
+
Useful to control all components from one place.</br>
This application is open-source (https://github.com/yt-dlp/yt-dlp/).</br>
+
This [[PowerShell: Download YouTube Video#Script|PowerShell script]] functions as a menu.</br>
  
==='ffmpeg'===
+
===yt-dlp===
YouTube stores videos as multiple components, seperating video from audio, and having different quality levels.</br>
+
Required to download Video and Audio from YouTube.</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>
  
ffmpeg.exe is a command line application to merge the video with audio into one file, and to convert the format if needed.</br>
+
===FFmpeg===
This application is open-source (https://github.com/FFmpeg/FFmpeg).</br>
+
Required to merge Video and Audio, and to convert formats.</br>
 +
"ffmpeg.exe" is an [https://github.com/FFmpeg/FFmpeg 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</br>
 +
 
 +
===Node.js===
 +
Required to simulate a JavaScript environment, so YouTube does not think you are a bot.</br>
 +
"node.exe" is an [https://github.com/nodejs/node open-source] command line application, and can be downloaded from: https://nodejs.org/en/download</br>
  
 
===Cookies===
 
===Cookies===
Cookies from your YouTube session from browser are sometimes required to download, as YouTube requires identification for restricted videos or users.</br>
+
Sometimes required, as YouTube requires account identification on restricted videos or restricted client IPs.</br>
  
 
=Script=
 
=Script=
Setting up this PowerShell Menu Script is IMO the best way to do it for Windows, in terms of balancing security and ease of use and edit.</br>
 
 
* Make sure to try Update YT-DLP first (with the shortcut) when encountering issues.
 
* A list of available formats for the given URL will automatically be shown.
 
* Downloads will automatically be converted to .mp4 (if needed), using ffmpeg.
 
* After download completion, you will automatically be prompted for a next download.
 
* Script has parameters, so can also be used by other scripts and automations/jobs.
 
* Everything is open-source.
 
 
=Setup=
 
Create a new folder, and put the following in there:
 
 
# Download '''yt-dlp.exe''' from https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp.exe
 
# Download '''ffmpeg.exe''' from https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-win64-gpl.zip (found in the 'bin' folder).
 
# Create a new shortcut, with location '''yt-dlp.exe -U''', and name it '''Update YT-DLP'''
 
# Create a new folder called '''Downloads'''
 
# Open Notepad, copy the PowerShell code below, and save it as '''Download.ps1'''
 
 
 
<pre>
 
<pre>
param([string]$URL, [string]$Cookies, [string]$Quality, [string]$Location)
+
param([string]$URL, [string]$Cookies, [string]$Quality, [string]$Location, [string]$Node)
  
 
function Download-YoutubeVideo
 
function Download-YoutubeVideo
Line 50: Line 38:
 
         Write-Host "[C] for Chrome, [F] for Firefox, [L] for local cookies.txt, empty to skip: " -ForegroundColor Yellow -NoNewline; $Cookies = Read-Host
 
         Write-Host "[C] for Chrome, [F] for Firefox, [L] for local cookies.txt, empty to skip: " -ForegroundColor Yellow -NoNewline; $Cookies = Read-Host
  
         if($Cookies -eq "C") { $CookiesArgs = @('--cookies-from-browser', 'chrome') }
+
         if($Cookies -eq "C") { $Args = @('--cookies-from-browser', 'chrome') }
         if($Cookies -eq "F") { $CookiesArgs = @('--cookies-from-browser', 'firefox') }
+
         if($Cookies -eq "F") { $Args = @('--cookies-from-browser', 'firefox') }
         if($Cookies -eq "L") { $CookiesArgs = @('--cookies', 'cookies.txt') }
+
         if($Cookies -eq "L") { $Args = @('--cookies', 'cookies.txt') }
 
     }
 
     }
  
Line 69: Line 57:
 
     {
 
     {
 
         $Location = $PSScriptRoot + '\Downloads'
 
         $Location = $PSScriptRoot + '\Downloads'
 +
    }
 +
 +
    if(!$Node)
 +
    {
 +
        $Node = $PSScriptRoot + '\node\node.exe'
 +
        $Args += @('--js-runtimes', "node:$Node")
 
     }
 
     }
  
 
     Write-Host ""
 
     Write-Host ""
     ./yt-dlp.exe --format $Quality --merge-output-format mp4 $CookiesArgs --paths $Location --output '%(title)s.%(ext)s' $URL
+
     ./yt-dlp.exe --format $Quality --merge-output-format mp4 $Args --paths $Location --output '%(title)s.%(ext)s' $URL
  
 
     Write-Host -ForegroundColor Green "`nDone!"
 
     Write-Host -ForegroundColor Green "`nDone!"

Revision as of 16:31, 6 April 2026

Components

These parts are needed to Make Your Own YouTube Downloader:

Interface

Useful to control all components from one place.
This PowerShell script functions as a menu.

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).

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

param([string]$URL, [string]$Cookies, [string]$Quality, [string]$Location, [string]$Node)

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

    if(!$Cookies)
    {
        Write-Host "`nSelect Cookies" -ForegroundColor Yellow
        Write-Host "[C] for Chrome, [F] for Firefox, [L] for local cookies.txt, empty to skip: " -ForegroundColor Yellow -NoNewline; $Cookies = Read-Host

        if($Cookies -eq "C") { $Args = @('--cookies-from-browser', 'chrome') }
        if($Cookies -eq "F") { $Args = @('--cookies-from-browser', 'firefox') }
        if($Cookies -eq "L") { $Args = @('--cookies', 'cookies.txt') }
    }

    if(!$Quality)
    {
        Write-Host ""
        ./yt-dlp.exe $CookiesArgs -F $URL

        Write-Host "`nSelect Format ID(s) for Quality" -ForegroundColor Yellow
        Write-Host "'Video ID + Audio ID', empty for best video and audio: " -ForegroundColor Yellow -NoNewline; $Quality = Read-Host

        if(!$Quality) { $Quality = 'bestvideo+bestaudio' }
    }

    if(!$Location)
    {
        $Location = $PSScriptRoot + '\Downloads'
    }

    if(!$Node)
    {
        $Node = $PSScriptRoot + '\node\node.exe'
        $Args += @('--js-runtimes', "node:$Node")
    }

    Write-Host ""
    ./yt-dlp.exe --format $Quality --merge-output-format mp4 $Args --paths $Location --output '%(title)s.%(ext)s' $URL

    Write-Host -ForegroundColor Green "`nDone!"

    Remove-Variable * -ErrorAction SilentlyContinue
    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'.