Brukt PowerShell til å laste ned YouTube filmer

Av grunner er det smart å laste ned diverse YouTube filmer. En grunn er at man ikke trenger å bruke netttrafikk, det andre er at YouTube eller brukeren selv kan fjerne den film man liker å se på.

Det er flere metoder å hente ned YouTube filmer med. Det er fra å installere tillegg på nettleseren. Men da må man gjøre dette manuelt. Andre er at man ønsker å laste ned en spillliste noe som gjør manuell. Det blir mye arbeidet, spesielt når listen er over flere hundre filmer. Siden det gjøres manuelt.

Her har jeg laget et forslag der man bruker PowerShell for å laste ned YouTube filmer, både som spilleliste, filliste eller en og en.

Der fillisten er en tekstfil som inneholder de filmer man ønsker å laste ned. Jeg bruker youtube-dl.exe som verktøy til nedlasting. Denne lastes ned her. Husk å følg instruksjonen på den respektive nettsiden.

NB! youtube-dl.exe må ligge på samme sted som PowerShell programmet YTDownloadList.ps1 i denne løsningen.

Laste ned youtube spilleliste

Kommando:


.\YTDownloadList.ps1 -list <spillelisten>

Man går som vanlig til ønsket YouTube kanal. Gå så inn på spillelister for ønsket kanal. Velg ønsket spilleliste og høyreklikk. Kopiere adressen som vist.

Da får man f.eks. en spilleliste som ser slik ut https://www.youtube.com/watch?v=zyjI8SyUGV8&list=PLiZR583gK0B16c0z4ViZiJF0H-mLRqHDv

Slett alt det man ikke trenger. Så man står igjen med det som er etter list=, som vist her


.\YTDownloadList.ps1 -list PLiZR583gK0B16c0z4ViZiJF0H-mLRqHDv

Trykk enter og la PowerShell programmet gjøre sin jobb

Nedlastet YouTube filmene legger seg som vist nedenfor.

Prøver man å laste ned samme spilleliste på nytt igjen, vil ikke
YouTube filmene bli nedlastet.

Laste ned enkel youtube video

Kommando:

.\YTDownloadList.ps1 -one <youtube film>

Man går som vanlig til ønsket YouTube kanal. Velg ønsket film og høyreklikk. Kopiere adressen som vist.

f.eks. Har man en YouTube film som ønskes å bli lastet ned. Vil linken se slik ut https://www.youtube.com/watch?v=uyjBZIfqK7c eller https://youtu.be/uyjBZIfqK7c


.\YTDownloadList.ps1 -one uyjBZIfqK7c

Laste ned youtube filmer listet i en tekstfil

Kommando:


.\YTDownloadList.ps1 -file <filnavn>

Lag en tekstfil som inneholder YouTube filmer som vist nedenfor.

s6DKRgtVLGA
6p9Il_j0zjc
U_yrUt5QKXI

Lagre den med et ønsket navn som f.eks. minefavoritter.txt

NB! Husk hvor tekstfil ligger hen. Siden man må legge inn stien. Eller kan man legge på samme sted som YTDownloadList.ps1 som vist nedenfor.


.\YTDownloadList.ps1 -file minefavoritter.txt

Hvis man prøver å laste ned listen igjen vil man ikke få gjort det. De som allerede er lastet ned er blitt registret som nedlastet.

Kombinert nedlasting av YouTube filmer

Kommado:


.\YTDownloadList.ps1 -list <spillelisten> -file <filnavn> -one <youtube film>

Eksempel på en kombinert løsning:


.\YTDownloadList.ps1 -list PLiZR583gK0B16c0z4ViZiJF0H-mLRqHDv -file minefavoritter.txt -one uyjBZIfqK7c

Kommentar

Nå kan du laste ned dine YouTube favoritter på en enkel måte.

YTdonefiles.txt inneholder alle YouTube videoer. Så du trenger ikke å laste ned samme film flere ganger.

Powershell kode

# powershell -ExecutionPolicy ByPass -File .\YTDownloadList.ps1 -list -file -one

	param (
			[string]$list = '',
			[string]$file = '',
			[string]$one = ''
		)
		
	function YTdownloader {
	param( [string] $v)
	Write-Host ("Try to download " + $v)
	$d = Get-Content -Path .\YTdonefiles.txt
	$s = 'false'
	
	:check ForEach ($video in $d)
	{
		if ($video -eq $v) 
			{
			$s = 'true'
			break :check
			}
	}
	
	if ($s -eq 'false'){
		.\youtube-dl.exe "http://www.youtube.com/watch?v=$v"

		Add-Content -Path .\YTdonefiles.txt -Value $v
		} else  {Write-Host ("Already downloaded")}
	}
	
	if (-Not (Test-Path -path .\YTdonefiles.txt)) {Add-Content -Path .\YTdonefiles.txt -Value 'YouTube Downloaded files'}
	
	if (-Not $list -eq '')
	{
		$Playlisturl = "http://www.youtube.com/playlist?list="+$list
		$VideoUrls= (invoke-WebRequest -uri $Playlisturl).Links | ? {$_.HREF -like "/watch*"} | `
		? innerText -notmatch ".[0-9]:[0-9]." | ? {$_.innerText.Length -gt 3} | Select innerText, `
		@{Name="URL";Expression={ $_.href }} | ? innerText -notlike "*Play all*"
	 
	ForEach ($video in $VideoUrls){
				
		$v = $video.URL -replace 'v=', 'xx_xx'  -replace '&amp', 'xx_xx' -split 'xx_xx'  

		YTdownloader($v[1])
		
		}
		
	} else {Write-Host ("No list to download")}
	if (-Not $file -eq '')
	{
		$liste = Get-Content -Path $file
				
		ForEach ($video in $liste){
		
		Write-Host ("Downloading " + $video)
		
		YTdownloader($video)
		}
	} else {Write-Host ("No file list to download")}

	if (-Not $one -eq '')
		{ YTdownloader($one) } else {Write-Host ("No single video to download")}

Koden kan lastes ned her.

Enkelt!

Frontbilde av Christian Wiediger (Unsplash)

Vennligst registrer deg for nyheter!

Nå abonnert du på mine nye artikler. Tusen takk!

Det oppstod en feil under din registrering. Vær så snill, prøv på nytt.