Stahování videa a audia z youtube v PowerShellu
Hromadné stahování z Youtube
Žijeme v online době, kdy je všechno dostupné online a na svých zařízeních toho už moc nemáme. Youtube je jedna z takových služeb. Ale občas se může stát, že narazíme na něco, co bychom si chtěli uložit. Třeba najdeme dobrý seriál, který nás má naučit nějakou technologii a chceme si ho vzít s sebou někam, kde nebude dobrý signál, ale budeme tam mít dost času. Nebo narazíme na něco, co bychom si chtěli uložit jen jako audio a pustit v autě. A nebo nás nebaví spousta reklam, která se nám pustí během sledování. V tomhle článku najdete postup, jak zprovoznit stahování v PowerShellu, tipy na další služby, ze kterých lze stahovat a hlavně možnost, jak stahování naplánovat a pustit třeba přes noc.
Návod funguje pro Windows 11 a je jedno, jestli máte Home, Professional nebo Enterprise. U ostatních verzí nevím. Windows 11 mají v sobě PowerShell ve verzi 5.1. My si k němu přidáme PowerShell 7, protože je novější a mám to v něm otestováno. PowerShell 7 nenahradí 5.1, budou fungovat oba. Spustíme si PowerShell 5.1 a pustíme tento příkaz:
winget install --id Microsoft.PowerShell --source winget
Můžeme zavřít okno PowerShell 5.1 a pustit PowerShell 7. Pak zjistíme verzi Pythonu.
winget search --id Python.Python --source winget
Zajímá nás sloupec Id. Verze nejsou desetinná čísla, takže 3.2 není víc než 3.14. Najdeme nejvyšší verzi, což v době
vzniku článku byla verze 3.14. Takže ji nainstaluji.
winget install Python.Python.3.14
Musíme zavřít okno PowerShellu a znovu otevřít, aby se načetly cesty. Pak nainstalujeme youtube downloader.
pip install yt-dlp
Abychom mohli z youtube videa vytáhnout jen audio stopu, tak potřebujeme FFmpeg.
winget install Gyan.FFmpeg
Youtube posílá výzvy v JavaScript, takže potřebujeme něco, co je bude umět zpracovat. Použijeme Deno JavaScript engine.
winget install DenoLand.Deno
Abychom nemuseli pokaždé psát hromadu parametrů, tak si vytvoříme dvě funkce, ve kterých si definujeme dva příkazy,
jeden pro stáhnutí videa a jeden pro stáhnutí audia: ytv a yta. Funkce uložíme do profilu PowerShellu, aby se načetly
vždy při startu PowerShellu. Jelikož jsme PowerShell 7 práve nainstalovali, tak profil není vytvořený, tak ho vytvoříme
a pak ho otevřeme v Notepadu.
New-Item -ItemType File -Path $PROFILE -Force
notepad $PROFILE
V těch dvou funkcích říkáme, kde naše nové příkazy najdou configurační soubor. Klidně si cestu upravte, ale pak musíte
upravit i příkazy, které přijdou a budou vytvářet strukturu složek a souborů. Já tam mám toto:
function ytv {
yt-dlp --config-location "C:\yt-dlp\config\video.conf" @args
}
function yta {
yt-dlp --config-location "C:\yt-dlp\config\audio.conf" @args
}
Uložíme v Notepadu profil, vypneme PowerShell a zase spustíme (aby se nám načetl profil). A vytvoříme si strukturu souborů a otevřeme konfigurační soubor pro audio:
New-Item -ItemType Directory -Path "C:\yt-dlp" -Force
New-Item -ItemType Directory -Path "C:\yt-dlp\audio" -Force
New-Item -ItemType Directory -Path "C:\yt-dlp\video" -Force
New-Item -ItemType Directory -Path "C:\yt-dlp\config" -Force
New-Item -ItemType File -Path "C:\yt-dlp\config\video.conf" -Force
New-Item -ItemType File -Path "C:\yt-dlp\config\audio.conf" -Force
notepad "C:\yt-dlp\config\audio.conf"
Vložíme do souboru toto nastavení a uložíme.
--js-runtimes deno
--remote-components ejs:github
--paths "C:\yt-dlp\Audio"
--output "%(upload_date)s - %(title)s.%(ext)s"
--extract-audio
--audio-format mp3
--audio-quality 0
--download-archive "C:\yt-dlp\Audio\archiv.txt"
--sleep-interval 5
--max-sleep-interval 15
#--limit-rate 2M
#--cookies-from-browser firefox
Rozebereme si přepínače. Pokud vás to nezajímá a chcete to jen nastavit, tak přeskočte na další příkaz.Youtube posílá klientům výzvy. Pokud správně nezareagují, tak jim buď video nedá nebo přiškrtí rychlost/kvalitu. Výzvy potřebují engine pro JavaScript, to jsme si říkali.
--js-runtimes deno ... použij engine DenoLand
--remote-components ejs:github ... na výzvu je potřeba korektně reagovat, takže je potřeba spustit správný JavaScript script, který si nástroj sám stáhne s GitHubu a použije.
--paths "C:\yt-dlp\Audio" ... kam uložit stažený soubor
--output "%(upload_date)s - %(title)s.%(ext)s" ... jak pojmenovat stažený soubor
--extract-audio ... chceme jen audio
--audio-format mp3 ... chceme ho jako mp3
--audio-quality 0 ... v nejlepší kvalitě
--download-archive "C:\yt-dlp\Audio\archiv.txt" ... a chceme si pamatovat, co už jsme stáhli, ať to netaháme znovu
--sleep-interval 5 ... aby nás Youtube nevyhmátl jako bota, tak se náhodně zvolí interval, který to bude čekat. Toto je minimum.
--max-sleep-interval 15 ... a toto je maximum
#--limit-rate 2M ... video se stahuje maximální rychlostí, 4K video, které mělo 80 minut, jsem stáhl za 40 minut. Ale někdy se může hodit rychlost omezit, protože máte doma další lidi, kteří chtějí používat připojení. Nebo budete stahovat přes noc, tak raději necháte tahat menší rychlostí, ať nejste Youtube podezřelí
#--cookies-from-browser firefox ... některá videa vyžadují přihlášení, ale tady nejde zadat přihlášení. Takže se to řeší tak, že se přihlásíte v prohlížeči (v mém případě ve Firefoxu), ten dostane od youtube cookie. A stahovač si to cookie od firefoxu vezme a použije. Nejsem si jistý, jestli to nepotřebuje v případě, že si chcete stáhnout vše v nějakém vašem playlistu. Ten # na začátku znamená, že se ten parametr nepoužije. Tímto způsobem něco jednoduše zapnete a vypnete.
Teď si otevřeme konfigurační soubor pro stažení videa.
notepad "C:\yt-dlp\config\video.conf"
A vložíme do něj následující řádky.
--js-runtimes deno
--remote-components ejs:github
--paths "C:\yt-dlp\Video"
--merge-output-format mp4
--output "%(upload_date)s - %(title)s.%(ext)s"
--download-archive "C:\yt-dlp\video\archiv.txt"
--sleep-interval 5
--max-sleep-interval 15
#--limit-rate 2M
#--cookies-from-browser firefox
Tady asi není potřeba procházet jednotlivé parametry.
No a co teď s tím můžeme dělat? Zkusíme něco stáhnout a dám sem i výpis toho, jak to vypadá. Tak třeba jedno video:
ytv https://www.youtube.com/watch?v=9Kal_Neb-Ug
[youtube] Extracting URL: https://www.youtube.com/watch?v=9Kal_Neb-Ug
[youtube] 9Kal_Neb-Ug: Downloading webpage
[youtube] 9Kal_Neb-Ug: Downloading tv samsung player API JSON
[youtube] 9Kal_Neb-Ug: Downloading visionos player API JSON
[youtube] 9Kal_Neb-Ug: Downloading player 4efb8b2c-main
[youtube] [jsc:deno] Solving JS challenges using deno
[youtube] 9Kal_Neb-Ug: Downloading m3u8 information
[info] 9Kal_Neb-Ug: Downloading 1 format(s): 401+251-6
[download] Sleeping 8.94 seconds ...
[download] Destination: C:\yt-dlp\Video\20260325 - Stargate Universe - Twin Destinies.f401.mp4
[download] 100% of 247.92MiB in 00:00:37 at 6.69MiB/s
[download] Sleeping 7.23 seconds ...
[download] Destination: C:\yt-dlp\Video\20260325 - Stargate Universe - Twin Destinies.f251-6.webm
[download] 100% of 8.53MiB in 00:00:00 at 9.96MiB/s
[Merger] Merging formats into "C:\yt-dlp\Video\20260325 - Stargate Universe - Twin Destinies.mp4"
Deleting original file C:\yt-dlp\Video\20260325 - Stargate Universe - Twin Destinies.f251-6.webm (pass -k to keep)
Deleting original file C:\yt-dlp\Video\20260325 - Stargate Universe - Twin Destinies.f401.mp4 (pass -k to keep)
Teď můžeme zkusit stáhnout nějaké audio. Zase tam dám celý výpis, jak to vypadá:
yta https://youtu.be/UTcPyEOQfUA?si=FDZq4YeQgFIr7HtP Extracting cookies from firefox Extracted 1759 cookies from firefox [youtube] Extracting URL: https://youtu.be/UTcPyEOQfUA?si=FDZq4YeQgFIr7HtP [youtube] UTcPyEOQfUA: Downloading webpage [youtube] UTcPyEOQfUA: Downloading web embedded client config [youtube] UTcPyEOQfUA: Downloading player 4efb8b2c-main [youtube] UTcPyEOQfUA: Downloading web embedded player API JSON [youtube] UTcPyEOQfUA: Downloading tv samsung player API JSON [youtube] [jsc:deno] Solving JS challenges using deno [youtube] UTcPyEOQfUA: Downloading m3u8 information [info] UTcPyEOQfUA: Downloading 1 format(s): 251 [download] Sleeping 11.92 seconds ... [download] Destination: C:\yt-dlp\Audio\20250813 - Gracie Abrams - I Told You Things (Live From Outside Lands 2025).webm [download] 100% of 3.58MiB in 00:00:00 at 11.00MiB/s [ExtractAudio] Destination: C:\yt-dlp\Audio\20250813 - Gracie Abrams - I Told You Things (Live From Outside Lands 2025).mp3 Deleting original file C:\yt-dlp\Audio\20250813 - Gracie Abrams - I Told You Things (Live From Outside Lands 2025).webm (pass -k to keep)Co dál bychom mohli zkusit? Třeba stáhnout všechny shorts z nějakého kanálu. Tady je vzorek, nevím, jestli budu moct nakopírovat celý proces, ale zkusím.
yta https://www.youtube.com/@KatherineCordova/shorts Extracting cookies from firefox Extracted 1761 cookies from firefox [youtube:tab] Extracting URL: https://www.youtube.com/@KatherineCordova/shorts [youtube:tab] @KatherineCordova/shorts: Downloading webpage [download] Downloading playlist: Katherine Cordova - Shorts [youtube:tab] Playlist Katherine Cordova - Shorts: Downloading 23 items of 23 [download] Downloading item 1 of 23 [youtube] Extracting URL: https://www.youtube.com/shorts/Q6Taiw7RoJ0 [youtube] Q6Taiw7RoJ0: Downloading webpage [youtube] Q6Taiw7RoJ0: Downloading web embedded client config [youtube] Q6Taiw7RoJ0: Downloading player 4efb8b2c-main [youtube] Q6Taiw7RoJ0: Downloading web embedded player API JSON [youtube] Q6Taiw7RoJ0: Downloading tv samsung player API JSON [youtube] [jsc:deno] Solving JS challenges using deno [youtube] Q6Taiw7RoJ0: Downloading m3u8 information [info] Q6Taiw7RoJ0: Downloading 1 format(s): 251 [download] Sleeping 12.24 seconds ... [download] Destination: C:\yt-dlp\Audio\20260728 - The best part of Odysseus…but on piano. #odysseus #piano #odyssey.webm [download] 100% of 2.28MiB in 00:00:00 at 5.17MiB/s [ExtractAudio] Destination: C:\yt-dlp\Audio\20260728 - The best part of Odysseus…but on piano. #odysseus #piano #odyssey.mp3 Deleting original file C:\yt-dlp\Audio\20260728 - The best part of Odysseus…but on piano. #odysseus #piano #odyssey.webm (pass -k to keep) [download] Downloading item 2 of 23 ... a tak dále až ... [download] Downloading item 23 of 23 [youtube] Extracting URL: https://www.youtube.com/shorts/44bS1QOzd5M [youtube] 44bS1QOzd5M: Downloading webpage [youtube] 44bS1QOzd5M: Downloading web embedded client config [youtube] 44bS1QOzd5M: Downloading web embedded player API JSON [youtube] 44bS1QOzd5M: Downloading tv samsung player API JSON [youtube] [jsc:deno] Solving JS challenges using deno [youtube] 44bS1QOzd5M: Downloading m3u8 information [info] 44bS1QOzd5M: Downloading 1 format(s): 251 [download] Sleeping 6.78 seconds ... [download] Destination: C:\yt-dlp\Audio\20221113 - golden hour piano cover but it sounds like 3 HANDS playing 🎹 JVKE #shorts.webm [download] 100% of 1.06MiB in 00:00:00 at 4.42MiB/s [ExtractAudio] Destination: C:\yt-dlp\Audio\20221113 - golden hour piano cover but it sounds like 3 HANDS playing 🎹 JVKE #shorts.mp3 Deleting original file C:\yt-dlp\Audio\20221113 - golden hour piano cover but it sounds like 3 HANDS playing 🎹 JVKE #shorts.webm (pass -k to keep) [download] Finished downloading playlist: Katherine Cordova - ShortsStejně tak by šla stáhnout všechna videa, ale ta jsou větší a na kanálu je jich přes 300.
yta https://www.youtube.com/@KatherineCordova/videosMůžete si stáhnout i všechno z vašeho playlistu, ale musíte dát adresu do uvozovek. I tak to občas mrčí, že nic nenašel a podobně, ale většinou mi to nakonec stáhl.
Ten program umí stahovat z mnohem většího počtu stránek. Autoři různých služeb se tomu snaží bránit, takže ne všechny služby
vždy fungují. Níže najdete seznam a většinou je tam i informace, která služby je zrovna rozbitá:
Seznam podporovaných služeb
Proto je dobré udržovate všechno aktuální. U hlavních služeb je většinou v následující aktualizaci vše opraveno. Níže jsou příkazy
pro aktualizaci programů:
python -m pip install -U "yt-dlp[default]" winget upgrade DenoLand.Deno winget upgrade Gyan.FFmpegTak veselé stahování.