비디오를 다운로드하지 않고`youtube-dl`로 YouTube 비디오의 URL을 얻는 속도가 느립니다.


10

youtube-dl 및 -g비디오를 다운로드하지 않는 "시뮬레이션"옵션 을 사용하여 URL을 가져오고 싶습니다 .

그래서 나는 다음 명령을 내렸다.

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

7 ~ 8 초 후에 다음과 같은 결과를 얻었습니다.

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

그러나 문제는 URL을 쿼리하는 데 약 7 ~ 8 초가 걸린다는 것입니다.
더 빨라질 방법이 있습니까?


정확히 "시뮬레이션"이란 무엇입니까?
Volker Siegel

-g 옵션 다음에 youtube-dl 옵션을 제공하면 출력으로 언급 한대로 URL을 생성 (시뮬레이션)합니다.
bharath kumar reddy bojja

답변:


9

시간은 일을하면서 보낸다

명령은 시간을 낭비하거나 기다리지 않고
실제로 시간이 걸리는 작업을 수행합니다. 여러 개의 작은 네트워크 지연을 추가하면 시간이 걸릴 수 있습니다. 그러나 유튜브쪽에 지연이 생길 수도 있습니다.

필요한 HTML을 다운로드하는 데 걸리는 시간입니다.
이 명령은 적어도 두 번 이상의 HTTP 요청을해야합니다.

따라서 느린 것이 있으면 이미 요청 수를 곱한 것입니다.

나를 위해 그것은 매우 빠른 라인에서 1.5 초가 걸립니다-그것은 8 초에서 그리 멀지 않습니다.


알아내는 방법

알아내는 데 사용한 명령을 보여 드리겠습니다.

예제를보다 깔끔하게 만들기 위해 URL에 변수를 사용합니다.

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

우리는 명령 기간을 측정하려고합니다. 명령을 사용하면 명령 time과 셸 내장을 혼용하지 않도록주의해야합니다. 작은 함수를 사용하여 줄을 더 짧게 만듭니다.

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

명령은 비디오 파일의 URL을 작성합니다 (80 열로 잘림).

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

내 컴퓨터에서 실행하는 데 걸리는 시간을 측정 해 보겠습니다.

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

좋아, 1.5 초 질문보다 빠르지 만 그렇게 빠르지는 않습니다. 그러나 어떻게 시간을 보내고 있습니까? 어쩌면 숨겨진 방법으로 비디오를 다운로드하여 버릴 수 있습니까? 비디오는 360p에서 11 분입니다. 옵션없이 다운로드하면 약 13 초에서 10 배가 더 걸립니다.
verbose 옵션을 사용하여 자세히 살펴보십시오 -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

아, '[debug]'줄이 인쇄되기까지 약간의 지연이 있습니다. youtube-dl자체 구성 설정에 시간이 걸리는 것 같습니다 . 우리가 찾고있는 지연이 아니라 1/4 정도입니다. 그러나 우리가 배울 youtube-dl수있는 것은 구현 자체가 느릴 수 있다는 것입니다.
메시지 후 결과 URL이 인쇄 될 때까지 아무 일도 일어나지 않습니다. 따라서 우리는 여전히 흥미로운 부분을 보지 못합니다.
옵션 -g은 세미 비밀 URL을 찾는 복잡한 부분을 수행하여 인쇄 한 다음 결국 실제 다운로드를 건너 뛴다는 점에서 비디오 다운로드를 "시뮬레이션"하는 것입니다. -sURL을 출력하지 않는 유사한 옵션이 있으며 그렇지 않은 경우 비슷합니다. 같은 시간이 걸리면 충분히 비슷하다고 가정 해 봅시다. 우리는 그것을 확인해야합니다.

$ 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

좋아요, -s와 같은 시간이 걸리므로 -g테스트를 위해 교체해도됩니다.
더 흥미로운 것은 이제 더 많은 결과를 얻었습니다. 흥미로운 타이밍으로 인쇄됩니다. 라인은 서로 비슷한 지연으로 인쇄되므로 실제로 찾는 시간이 걸리는 작업에 관한 것 같습니다.
메시지에서 두 개 이상의 웹 페이지가 다운로드됩니다. 그러나 "page"라는 단어가 단일 HTTP 요청과 단일 HTML 문서를 의미하지 않는다고 가정 할 수 있습니다.

우리는 무엇을 배웠습니까?

요점은 프로그램의 작업이 실제로 시간이 걸리고 무언가를 기다리거나 멈추지 않는다는 것입니다.
또한 비슷한 시간이 걸리는 여러 단계가 있습니다. 계산할 것이 많지 않으므로 네트워크 왕복이 어떤 식 으로든 합산됩니다.
즉, 연결 대기 시간은 여기서 만 중요합니다. 연결 처리량은 중요하지 않습니다.

인터넷 연결 속도를 높여 두 배 속도로 데이터를 전송할 수 있다면 전혀 도움이되지 않습니다. 그러나 더 좋은 ping시간을 가질 수 있다면 훨씬 빨라질 것입니다.
인터넷 서비스 제공 업체에 '핑'시간이 아닙니다. 중요한 것은 YouTube에 핑 시간이 다가오는 것입니다. 변경이 불가능할 수도 있습니다.

흥미롭게도 다음 단계에서 비디오를 다운로드 할 때 빠른 회선에 대한 요구 사항은 정확히 반대입니다. 대기 시간은 전혀 관련이 없으며 처리량은 실제로 중요합니다.


아직 피곤하지 않습니까?

시간이 실제로 소비되는 시간을 이해하기 위해 더 자세한 정보를 원하십니까?
다음 단계는 HTTP 연결을 추적하는 것입니다. 예를 들어 리디렉션과 같이 두 개보다 많은 왕복이 표시 될 수 있습니다. 당신은 사용할 수 있습니다 wireshark, 또는 로깅 HTTP 프록시, 또는 strace단지 연결하거나 작성하기위한 시스템 호출을 계산합니다.

오늘날 우리는 네트워크의 토끼 구멍을 충분히 깊이 살펴 보았습니다.


그렇다면 그러한 이유가 무엇일까요? 네트워크 연결이 느리기 때문입니까?
bharath kumar reddy bojja

속도가 얼마나 느린 지에 달려 있습니다. 질문은 무엇입니까? 내 예제에 대한 자세한 내용은 잠시만 기다려주십시오.
Volker Siegel

내 질문은 : 지연은 네트워크 연결이 느리기 때문입니까?
bharath kumar reddy bojja

네, 부분적 으로요 문제는 소리보다 덜 간단합니다.;) 연결 처리량에 관한 것이 아닙니다. 여기서 대기 시간이 중요합니다. 내가 알 수 있듯이 적어도 세 개의 HTTP 왕복이 있지만 더 많을 수 있습니다. 모든 지연에이 숫자를 곱하면 더해집니다. 나는 당신의 연결에 대해 아무것도 모른다. YouTube 측에서는 속도가 느려서 측정하지 않고 말하기가 어려울 수 있습니다. 인터넷에서 속도가 얼마나 빠른지 다른 것들을 시도하고 느리거나 정상적인 느낌인지 확인하십시오.
Volker Siegel

그래서, 나는 몇 가지 세부 사항을 추가했습니다 :)
Volker Siegel

6

그냥하십시오 :

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

출처


1

다른 이유가있을 수 있습니다. youtube-dl압축 된 Python 응용 프로그램으로 배포됩니다. 실행할 때마다 추출한 다음 실행합니다.

unzip명령을 사용하여 수동으로 추출 할 수 있습니다 . 그런 다음 실행하는 __main__.py것처럼 실행하십시오 youtube-dl. Pi와 같은 저전력 컴퓨터에서 성능이 눈에 띄게 향상됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.