Ottenere l'URL del video di YouTube con `youtube-dl` è lento, senza scaricare video


10

Voglio ottenere l'URL usando youtube-dl e l'opzione "simula" -gche non scarica il video.

Quindi ho dato il seguente comando:

youtube-dl -g https://www.youtube.com/watch?v=k4JGSAmu4lg

Dava il seguente output dopo 7 a 8 secondi

https://r20---sn-cvh7zn7d.googlevideo.com/videoplayback?initcwndbps=1113000&mt=1408702970&requiressl=yes&ipbits=0&sver=3&fexp=901454%2C902408%2C919145%2C924626%2C927622%2C927904%2C931330%2C931983%2C934024%2C934030%2C934804%2C945118%2C945308%2C946023%2C951914&ratebypass=yes&signature=38F111D46D72FFC50B47D50B3C9A631099BF5F83.FA134C91F407989B95ACADC1F1F6946B8F18C158&upn=tU0u5t7A2Uw&sparams=id%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Cmm%2Cms%2Cmv%2Cratebypass%2Crequiressl%2Csource%2Cupn%2Cexpire&mm=31&expire=1408724634&id=o-AJNPuDp9TKMKiwzUwvSk76W7JdA0cx0bRSum9mPJJ7Vo&mv=u&source=youtube&ms=au&key=yt5&ip=115.113.1.50&itag=18

Ma il problema è che ci vogliono dai 7 agli 8 secondi per interrogare l'URL.
C'è un modo in modo che possa essere più veloce?


Cosa intendi con "simulare", esattamente?
Volker Siegel,

quando diamo l'opzione -g seguita da youtube-dl, genererà (simulerà) l'URL come ho detto come output.
Bharath Kumar Reddy Bojja,

Risposte:


9

Il tempo è dedicato al lavoro

Il comando non si blocca o aspetta qualcosa che perde tempo,
in realtà funziona che richiede tempo; Molto probabilmente ci vuole tempo sommando più piccoli ritardi di rete. Ma potrebbe anche essere che ci siano ritardi sul lato YouTube, che si sommano.

Che è solo il tempo necessario per scaricare l'HTML necessario;
Il comando deve effettuare almeno due richieste HTTP, una dopo l'altra e probabilmente di più.

Quindi, se qualcosa è lento, viene moltiplicato per il numero di richieste già.

Per me ci vogliono 1,5 secondi su una linea molto veloce - che non è poi così lontana da 8 secondi.


Come scoprirlo

Mostrerò i comandi che ho usato per scoprire:

Per rendere gli esempi più ordinati, utilizziamo una variabile per l'URL:

$ u="https://www.youtube.com/watch?v=k4JGSAmu4lg"

Vogliamo misurare la durata dei comandi; L'uso del comando timedeve fare attenzione a non confondere il comando e la shell incorporata. Usiamo una piccola funzione per accorciare le linee:

$ t(){/usr/bin/time -f 'Time: %es' "$@";}

Il tuo comando scrive l'URL del file video (troncato a 80 colonne):

$ youtube-dl -g "$u"
https://r20---sn-cxg7en7d.googlevideo.com/videoplayback?signature=091F68E823

Misuriamo il tempo necessario per l'esecuzione sul mio computer:

$ t youtube-dl -g "$u"
https://r20---sn-cxg7en7d.googlevideo.com/videoplayback?signature=091F68E823
Time: 1.44s

Ok, un secondo e mezzo. Più veloce della domanda, ma non molto più veloce. Ma come passa il tempo? Forse scarica il video in qualche modo nascosto e lo scarta? Il video dura 11 minuti a 360p. Il solo download senza opzioni richiede circa 13 secondi, dieci volte di più.
È necessario dare un'occhiata più da vicino, con l'opzione dettagliata -v:

$ t youtube-dl -v -g "$u"
[debug] System config: []
[debug] User config: []
[debug] Command-line args: ['-v', '-g', 'https://www.youtube.com/watch?v=k4J
[debug] Encodings: locale 'UTF-8', fs 'UTF-8', out 'UTF-8', pref: 'UTF-8'
[debug] youtube-dl version 2014.02.06
[debug] Python version 2.7.6 - Linux-3.13.0-24-generic-x86_64-with-Ubuntu-14
[debug] Proxy map: {}
https://r20---sn-cxg7en7d.googlevideo.com/videoplayback?sparams=id%2Cinitcwn
Time: 1.40s

Oh, c'è qualche ritardo prima che le righe '[debug]' vengano stampate. Sembra che youtube-dlpassi del tempo per la propria configurazione. È circa un quarto di secondo, non il ritardo che stiamo cercando. Ma da ciò che possiamo imparare è che l' youtube-dlimplementazione stessa potrebbe essere lenta.
Dopo i messaggi, non accade nulla fino alla stampa dell'URL del risultato. Quindi non vediamo ancora la parte interessante.
L'opzione -gè "simulare" il download del video, nel senso che fa la parte complicata di scoprire quell'URL semi-segreto, lo stampa, ma alla fine salta il download effettivo. Esiste un'opzione simile -sche non genera l'URL e sembra simile in caso contrario. Supponiamo che sia abbastanza simile se impiega più o meno lo stesso tempo; Dobbiamo verificarlo.

$ t youtube-dl -v -s "$u"
[debug] System config: []
[debug] User config: []
[debug] Command-line args: ['-v', '-s', 'https://www.youtube.com/watch?v=k4J
[debug] Encodings: locale 'UTF-8', fs 'UTF-8', out 'UTF-8', pref: 'UTF-8'
[debug] youtube-dl version 2014.02.06
[debug] Python version 2.7.6 - Linux-3.13.0-24-generic-x86_64-with-Ubuntu-14
[debug] Proxy map: {}
[youtube] Setting language
[youtube] k4JGSAmu4lg: Downloading webpage
[youtube] k4JGSAmu4lg: Downloading video info webpage
[youtube] k4JGSAmu4lg: Extracting video information
Time: 1.45s

Ok, -simpiega lo stesso tempo -g, quindi va bene sostituirli per i test.
Più interessante è che ora abbiamo ottenuto più output. Ed è stampato con un tempismo interessante: le linee vengono stampate con un ritardo simile l'una all'altra, quindi sembra che riguardino le azioni che stanno effettivamente prendendo il tempo che cerchiamo.
Dai messaggi, vengono scaricate almeno due pagine Web. Ma possiamo presumere che la parola "pagina" non significherà una singola richiesta HTTP e un singolo documento HTML.

Che cosa abbiamo imparato?

Il punto principale è che il lavoro del programma in realtà richiede tempo, non è in attesa di qualcosa o impiccagione.
Inoltre, vediamo più passaggi che richiedono quantità di tempo simili. Non c'è molto da calcolare, quindi si tratta di roundtrip di rete in qualche modo, sommando.
Ciò significa che la latenza della nostra connessione è importante solo qui. Il throughput della connessione è semplicemente irrilevante.

Se rendessi la tua connessione Internet più veloce in modo che possa trasferire i dati a doppia velocità, ciò non aiuterebbe affatto. Ma se riesci a ottenere pingtempi migliori , sarà molto più veloce.
Tuttavia, non si tratta di "ping" volte al tuo provider di servizi Internet; Il tempo di ping fino a YouTube è importante e potrebbe non essere possibile modificarlo.

È interessante notare che per il passaggio successivo, il download di un video, i requisiti per una linea veloce sono esattamente l'opposto: la latenza non è affatto rilevante e la velocità effettiva conta davvero.


Non sei ancora stanco?

Desideri ulteriori dettagli per capire in che tempo passa davvero?
Il prossimo passo sarebbe quello di tracciare la connessione HTTP; Sospetto che possa mostrare molti più roundtrip di due, ad esempio per i reindirizzamenti. È possibile utilizzare wiresharkun proxy HTTP di registrazione o stracesemplicemente contare le chiamate di sistema per la connessione o la scrittura.

Per oggi, abbiamo entrambi guardato abbastanza in profondità nella tana del coniglio della rete.


Quindi, quale potrebbe essere la ragione per così tanto tempo? È dovuta una connessione di rete lenta?
Bharath Kumar Reddy Bojja,

Dipende da quanto è lento: qual è la domanda? Aspetta un minuto per i dettagli dei miei esempi, li sto scrivendo.
Volker Siegel,

La mia domanda è: il ritardo è dovuto alla connessione di rete lenta?
Bharath Kumar Reddy Bojja,

Sì, parzialmente. La domanda è meno semplice di quanto sembri;) Non riguarda il throughput della connessione. La latenza è importante qui. Da quello che posso dire, ci sono almeno tre roundtrip HTTP - ma forse di più. Tutti i ritardi vengono moltiplicati per questo numero, che si somma. Non so nulla della tua connessione; Potrebbe essere lento alla fine di YouTube, difficile da dire senza misurare. Prova altre cose in rete per le quali sai quanto sono veloci e controlla se si sente più lento o normale.
Volker Siegel,

Quindi, ho aggiunto alcuni dettagli :)
Volker Siegel,

6

Basta fare un:

youtube-dl -j --flat-playlist 'https://www.youtube.com/watch?v=k4JGSAmu4lg' | jq -r '.id' | sed 's_^_https://youtube.com/v/_'

fonte


1

Potrebbe esserci un altro motivo. youtube-dlè distribuito come un'applicazione Python zippata. Ogni volta che lo esegui, lo estrae e quindi lo esegue.

Puoi estrarlo manualmente con il unzipcomando. Quindi corri __main__.pycome se stessi correndo youtube-dl. Su un computer a bassa potenza, come il Pi, ciò aumenterà notevolmente le tue prestazioni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.