Rychlejší stahování nejen z youtube
V posledních dnech se nám nějak pokazil youtube a stahování obsahu pomocí youtube-dl je velmi pomalé. V tomto krátkém návodu si ukážeme, jak to opravit.
Skriptík youtube-dl asi netřeba dlouze představovat, umožňuje stahovat data z různých zdrojů (nejen tedy z youtube, to je jen klamání názvem).
Umí toho hodně, používám jej na stahování celých playlistů (např. přednášek), umí přeskočit již stažené soubory apod.
Jenže v posledních dnech se to nějak pokazilo a stahování (a to se týká zejména audio streamu) je nesnesitelně pomalé.
Oprava je relativně snadná, youtube-dl
umí používat download akcelerátor. Já
používám axel.
axel
lze použít i samostatně:
axel -n 8 -a url
kde:
-n
je počet stahovacích threadů (nastavte na co nejmenší hodnotu při které je ještě dosažena požadovaná rychlost)-a
je přepínač stylu progress baru- url je adresa stahovaného souboru
Použití v youtube-dl
je potom následující:
youtube-dl --external-downloader axel --external-downloader-args "-n 8 -a" url
Je výhodnější si upravit konfiguraci youtube-dl
v souboru ~/.config/youtube-dl/config
, uvádím zde kompletní znění, které používám:
-i
-w
-c
-f bestvideo[ext=mp4]+bestaudio[ext=m4a]
--merge-output-format mp4
-o'%(uploader)s-%(title)s-%(id)s.%(ext)s'
--external-downloader axel --external-downloader-args "-n 8 -a"
kde:
-i
ignoruje chyby, například nedostupné soubory v playlistu přeskročí a stahuje další-w
nepřepisuje již stažené soubory, výhodné, pokud chceme opakovaně stahovat nějaký kanál, stáhne jen novinky-c
pokusí se navázat na přerušené stahování, tohle nefunguje s akcelerátorem-f
formát stahovaných dat, v tomto nastavení se stáhne nejlepší možné audio i video a následně se sloučí - pokud se neuvede,youtube-dl
stahuje format best, tak jak jej poskytne server. Což není vždy to pravé a lze se dočkat překvapení typu 360p apod., přičemž je dostupný i HD a to i kvalitou, nikoliv jen rozlišením.--merge-output-format
viz. předchozí bod, určuje kontejner do kterého se mají streamy sloučit-o
určuje pojmenování vysledného souboru. Je dobré to nastavit, protožeyoutube-dl
občas mění výchozí pojmenování souborů, takže se občas stahuje již stažené (viz. parametr-w
).- a poslední řádek určuje nastavení externího download akcelerátoru.
Poznámka k formátu
Definice formátu bestvideo[ext=mp4]+bestaudio[ext=m4a]
stahuje nejlepší video
a audio streamy v kontejneru mp4 (resp. m4a). Pokud se to neuvede, tak
youtube-dl
stáhne nejlepší stream v libovolném kodeku, který nemusí jít
sloučit do kontejneru mp4 (který preferuji, je to aktuální standard), ale může
být nutné použít kontejner mkv.
Doplnění k axel
YouTube zdá se být čím dál rozbitější, a poslední dobou začalo blbnout
stahování zejména audio streamu i s axelem. Zdá se, že YouTube záměrně některá
spojení neukončuje, ale neposílá do nich data. To lze vyřešit přidáním
parametru --timeout
na nízkou hodnotu, např. 10 (sekund).
Lepší stahování playlistů
Dosud uvedená konfigurace se spoléhá na to, že všechna videa z daného playlistu
máme v jednom adresáři (a přeskakují se již stažené soubory stejného jména).
Pokud ovšem chceme stahovat nějaký kanál nebo playlist opakovaně a nechat
stáhnout pouze nová videa a stará si třeba ručně protřídit nebo mazat, může se
nám hodit parametr --download-archive /cesta/k/souboru
.
Do tohoto souboru si potom youtube-dl uloží id stahovaných médií a při opakovaném stažení daného kanálu je přeskočí.
Kompletní znění konfiguráku se všemy popsanými úpravami potom může vypadat následovně:
-i
-w
-c
-f bestvideo[ext=mp4]+bestaudio[ext=m4a]
--merge-output-format mp4
-o'%(uploader)s-%(title)s-%(id)s.%(ext)s'
--download-archive /home/user/.config/youtube-dl/download
--external-downloader axel --external-downloader-args "-n 8 -a -k -q -T 10"