PowerShell: Download YouTube Video
Contents
Overview
Long story short, YouTube makes it not so easy to download their videos.
So regardless what application you use to download them, it is always gonna require or include the following base components.
Setting up this system is IMO the best way to do it for Windows, in terms of balancing security and ease of use and edit.
'yt-dlp'
yt-dlp.exe is a command line application to download from YouTube, and needs to be regularly updated (as YouTube keeps changing the system).
This application is open-source (https://github.com/yt-dlp/yt-dlp/).
'ffmpeg'
ffmpeg.exe is a command line application that is used to convert the videos to .mp4 format (if needed).
This application is open-source (https://github.com/FFmpeg/FFmpeg).
Quality
YouTube devides videos up into multiple components, seperating video from audio, and having different quality levels.
Cookies
Cookies from your browser are sometimes required to download, as YouTube requires identification for restricted videos or users.
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
param([string]$URL, [string]$Cookies, [string]$Quality, [string]$Location)
function Download-YoutubeVideo
{
if(!$URL)
{
Write-Host ""; Write-Host "Enter YouTube URL: " -ForegroundColor Yellow -NoNewline; $URL = Read-Host
}
if(!$Cookies)
{
Write-Host ""; Write-Host "Select 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") { $CookiesArgs = @('--cookies-from-browser', 'chrome') }
if($Cookies -eq "F") { $CookiesArgs = @('--cookies-from-browser', 'firefox') }
if($Cookies -eq "L") { $CookiesArgs = @('--cookies', 'cookies.txt') }
}
if(!$Quality)
{
./yt-dlp.exe $CookiesArgs -F $URL
Write-Host ""; Write-Host "Select Quality" -ForegroundColor Yellow
Write-Host "Video ID + Audio ID, empty for best: " -ForegroundColor Yellow -NoNewline; $Quality = Read-Host
if(!$Quality) { $Quality = 'bestvideo+bestaudio' }
}
if(!$Location)
{
$Location = $PSScriptRoot + '\Downloads'
}
./yt-dlp.exe --format $Quality --merge-output-format mp4 $CookiesArgs --paths $Location --output '%(title)s.%(ext)s' $URL
Write-Host ""; Write-Host -ForegroundColor Green "Done!"; Write-Host ""
Remove-Variable * -ErrorAction SilentlyContinue
Download-YoutubeVideo
}
Download-YoutubeVideo
Script
- 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.
- Script has parameters, so can also be used by other scripts and automations/jobs.
- Everything is open-source.
Use Script
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'.