Quero obter o URL usando o youtube-dl e a opção "simular" -g
que não baixa o vídeo.
Então, eu dei o seguinte comando:
youtube-dl -g https://www.youtube.com/watch?v=k4JGSAmu4lg
Deu a seguinte saída após 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
Mas o problema é que demora cerca de 7 a 8 segundos para consultar o URL.
Existe alguma maneira de que seja mais rápido?
networking
performance
downloads
download-speed
youtube-dl
bharath kumar reddy bojja
fonte
fonte
Respostas:
O tempo é gasto trabalhando
O comando não trava ou espera por algo que está perdendo tempo,
ele realmente funciona e leva tempo; Provavelmente leva tempo adicionando vários pequenos atrasos na rede. Mas também pode haver atrasos no lado do youtube, que se somam.
Que leva apenas o tempo necessário para baixar o HTML necessário;
O comando precisa fazer pelo menos duas solicitações HTTP, uma após a outra e provavelmente mais.
Portanto, se algo for lento, ele será multiplicado pelo número de solicitações.
Para mim, são necessários 1,5 segundos em uma linha muito rápida - isso não está longe de 8 segundos.
Como descobrir
Vou mostrar os comandos que descobri:
Para tornar os exemplos mais organizados, usamos uma variável para o URL:
Queremos medir a duração dos comandos; O uso do comando
time
precisa tomar cuidado para não misturar o comando e o shell interno. Usamos uma função pequena para tornar as linhas mais curtas:Seu comando grava o URL do arquivo de vídeo (truncado para 80 colunas):
Vamos medir o tempo que leva para executar no meu computador:
Ok, um segundo e meio. Mais rápido do que na questão, mas não muito mais rápido. Mas como está gastando o tempo? Talvez ele faça o download do vídeo de alguma maneira oculta e o descarte? O vídeo tem 11 minutos em 360p. O download sem opções leva cerca de 13s - dez vezes mais.
Precisa dar uma olhada mais de perto, com a opção detalhada
-v
:Ah, há algum atraso antes das linhas '[debug]' serem impressas. Parece que
youtube-dl
leva algum tempo para sua própria configuração. São cerca de um quarto de segundo, não o atraso que estamos procurando. Mas o que podemos aprender é que ayoutube-dl
própria implementação pode ser lenta.Após as mensagens, nada acontece até que o URL do resultado seja impresso. Então ainda não vemos a parte interessante.
A opção
-g
é "simular" o download do vídeo no sentido de que ele faz a parte complicada de descobrir esse URL semi-secreto, imprimi-lo, mas depois pula o download real no final. Existe uma opção semelhante-s
que não gera a URL e, de outra forma, parece semelhante. Vamos supor que seja semelhante o suficiente se demorar aproximadamente o mesmo tempo; Precisamos verificar isso.Ok,
-s
leva o mesmo tempo que-g
, portanto, está tudo bem substituí-los para teste.Mais interessante é que agora temos mais resultados. E é impresso com um timing interessante: as linhas são impressas com um atraso semelhante entre si, portanto, parece que são sobre as ações que realmente levam o tempo que procuramos.
Das mensagens, pelo menos duas páginas da web são baixadas. Mas podemos supor que a palavra "página" não signifique uma única solicitação HTTP e um único documento HTML.
O que aprendemos?
O ponto principal é que o trabalho do programa realmente leva tempo, não está esperando por algo ou está pendurado.
Além disso, vemos várias etapas que levam quantidades semelhantes de tempo. Não há muito o que calcular, portanto, isso é de alguma forma, ida e volta à rede.
Isso significa que a latência da nossa conexão é importante apenas aqui. A taxa de transferência da conexão é apenas irrelevante.
Se você tornasse a sua conexão com a Internet mais rápida para poder transferir dados em velocidade dupla - isso não ajudaria em nada. Mas se você puder obter melhores
ping
tempos, isso será muito mais rápido.Não se trata de tempos de 'ping' para o seu provedor de serviços de Internet; O tempo de ping até o YouTube é o que importa - e pode não ser possível alterar.
Curiosamente, para a próxima etapa, baixar um vídeo, os requisitos para uma linha rápida são exatamente o oposto: a latência não é relevante e a taxa de transferência realmente importa.
Ainda não está cansado?
Deseja ainda mais detalhes para entender em que tempo é realmente gasto?
O próximo passo seria rastrear a conexão HTTP; Eu suspeitaria que pode mostrar muito mais ida e volta que duas, para redirecionamentos, por exemplo. Você pode usar
wireshark
, ou um proxy HTTP de log, oustrace
apenas contar as chamadas do sistema para conexão ou gravação.Por hoje, nós dois examinamos profundamente o buraco do coelho das redes.
fonte
Basta fazer um:
Fonte
fonte
Pode haver outro motivo.
youtube-dl
é distribuído como um aplicativo Python compactado. Cada vez que você o executa, ele o extrai e o executa.Você pode extraí-lo manualmente com o
unzip
comando Então corra__main__.py
como você correriayoutube-dl
. Em um computador de baixa potência, como o Pi, isso aumentará visivelmente o seu desempenho.fonte