PowerShell: Download YouTube Video

From DanIT
Revision as of 03:28, 2 April 2025 by Dan (talk | contribs)
Jump to navigation Jump to search

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

ffmpeg

ffmpeg.exe is a command line application that is used to convert the videos to .mp4 format (if needed).

Setup

Create a new folder, and put the following files in there:

  1. Download yt-dlp.exe from https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp.exe
  2. Download ffmpeg.exe from https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-win64-gpl.zip (found in the 'bin' folder).
  3. Create a new shortcut, with location yt-dlp.exe -U, and name it Update YT-DLP
  4. Create a new folder called Downloads
  5. 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