Quiero obtener la URL usando youtube-dl, y la opción "simular" -g
que no descarga el video.
Entonces le di el siguiente comando:
youtube-dl -g https://www.youtube.com/watch?v=k4JGSAmu4lg
Dio la siguiente salida después de 7 a 8 segundos
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
Pero el problema es que toma alrededor de 7 a 8 segundos para consultar la URL.
¿Hay alguna manera de que pueda ser más rápido?
networking
performance
downloads
download-speed
youtube-dl
Bharat Kumar Reddy Bojja
fuente
fuente
Respuestas:
El tiempo se gasta haciendo trabajo
El comando no se cuelga ni espera que algo pierda el tiempo,
en realidad funciona y lleva tiempo; Lo más probable es que tome tiempo al sumar múltiples retrasos de red pequeña. Pero también podría ser que haya retrasos en el lado de YouTube, que se suman.
Que solo se necesita el tiempo necesario para descargar el HTML;
El comando debe realizar al menos dos solicitudes HTTP, una tras otra, y probablemente más.
Entonces, si algo es lento, ya se multiplica por el número de solicitudes.
Para mí, lleva 1.5 segundos en una línea muy rápida, eso no está muy lejos de los 8 segundos.
Cómo averiguar
Mostraré los comandos que solía descubrir:
Para que los ejemplos sean más ordenados, utilizamos una variable para la URL:
Queremos medir la duración de los comandos; El uso del comando
time
debe tener cuidado de no mezclar el comando y el shell incorporado. Usamos una pequeña función para acortar las líneas:Su comando escribe la URL del archivo de video (truncado a 80 columnas):
Midamos el tiempo que tarda en ejecutarse en mi computadora:
Ok, un segundo y medio. Más rápido que en la pregunta, pero no mucho más rápido. Pero, ¿cómo es pasar el tiempo? ¿Tal vez descarga el video de alguna manera oculta y lo descarta? El video es de 11 minutos en 360p. Solo descargarlo sin opciones lleva unos 13 segundos, diez veces más.
Necesita echar un vistazo más de cerca, con la opción detallada
-v
:Ah, hay algún retraso antes de que se impriman las líneas '[depuración]'. Parece que
youtube-dl
pasa algo de tiempo para su propia configuración. Es un cuarto de segundo más o menos, no el retraso que estamos buscando. Pero lo que podemos aprender de él es que layoutube-dl
implementación en sí misma puede ser lenta.Después de los mensajes, no sucede nada hasta que se imprime la URL del resultado. Entonces todavía no vemos la parte interesante.
La opción
-g
es "simular" la descarga de video en el sentido de que hace la parte complicada de descubrir esa URL semisecreta, la imprime, pero luego se salta la descarga real al final. Hay una opción similar-s
que no genera la URL y, de lo contrario, parece similar. Supongamos que es lo suficientemente similar si toma aproximadamente el mismo tiempo; Necesitamos verificar eso.Ok,
-s
toma el mismo tiempo que-g
, así que está bien reemplazarlos para probarlos.Más interesante es que ahora tenemos más resultados. Y se imprime con un momento interesante: las líneas se imprimen con un retraso similar entre sí, por lo que parece que se trata de las acciones que realmente están tomando el tiempo que buscamos.
De los mensajes, se descargan al menos dos páginas web. Pero podemos suponer que la palabra "página" no significará una sola solicitud HTTP y un solo documento HTML.
Que aprendimos
El punto principal es que el trabajo del programa en realidad lleva tiempo, no está esperando algo o colgado.
Además, vemos varios pasos que requieren una cantidad de tiempo similar. No hay mucho que calcular, así que eso es un viaje de ida y vuelta a la red de alguna manera, sumando.
Eso significa que la latencia de nuestra conexión es importante solo aquí. El rendimiento de la conexión es irrelevante.
Si desea que su conexión a Internet sea más rápida para que pueda transferir datos a doble velocidad, eso no ayudaría en absoluto. Pero si puede obtener mejores
ping
tiempos, eso lo hará mucho más rápido.Sin embargo, no se trata de "hacer ping" a su proveedor de servicios de Internet; El tiempo de ping hasta YouTube es lo que importa, y puede que no sea posible cambiarlo.
Curiosamente, para el siguiente paso, descargar un video, los requisitos para una línea rápida son exactamente lo contrario: la latencia no es relevante en absoluto, y el rendimiento realmente importa.
¿Todavía no estás cansado?
¿Quiere aún más detalles para comprender en qué se dedica realmente el tiempo?
El siguiente paso sería rastrear la conexión HTTP; Sospecho que puede mostrar muchos más viajes de ida y vuelta que dos, por ejemplo, para redireccionamientos. Puede usar
wireshark
, o un proxy HTTP de registro, ostrace
simplemente contar las llamadas del sistema para conectarse o escribir.Por hoy, ambos hemos mirado lo suficientemente profundo en el agujero del conejo de las redes.
fuente
Solo haz un:
Fuente
fuente
Puede haber otra razón.
youtube-dl
se distribuye como una aplicación Python comprimida. Cada vez que lo ejecuta, lo extrae y luego lo ejecuta.Puede extraerlo manualmente con el
unzip
comando. Luego corre__main__.py
como lo haríasyoutube-dl
. En una computadora de baja potencia, como la Pi, que mejorará notablemente su rendimiento.fuente