Получение URL видео YouTube с 'YouTube-dl' является медленным, не загружая видео

Я хочу получить URL с помощью youtube-dl и "моделировать" опции -g это не загружает видео.

Таким образом, я дал следующую команду:

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

Но проблема - это, занимает приблизительно 7 - 8 секунд для запросов URL.
Есть ли какой-либо путь так, чтобы это могло быть быстрее?

10
задан 22 August 2014 в 19:14

3 ответа

Время, тратят выполнение работы

Команда не зависает или ожидает чего-то напрасно тратить время,
это на самом деле работает, который занимает время; Это по всей вероятности занимает время сложением нескольких задержек небольшой сети. Но могло также случиться так, что существуют задержки на стороне YouTube, которые складывают.

То, что это только время, которое требуется для загрузки 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

Хорошо, полторы секунды. Быстрее, чем в вопросе, но не этом намного быстрее. Но как это проводит время? Возможно, это действительно загружает видео некоторым скрытым способом и отбрасывает его? Видео составляет 11 минут в 360 пунктах. Просто загрузка его без опций берет о 13 - в десять раз дольше.
Потребность более тщательно изучить, с подробной опцией -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

О, существует некоторая задержка, прежде чем' [отладка]' строки будут распечатаны. Похож youtube-dl проводит некоторое время для своей собственной установки конфигурации. Это - четверть приблизительно секунды, не задержка, которую мы ищем. Но то, что мы можем узнать из него, то, что youtube-dl сама реализация может быть медленной.
После сообщений ничего не происходит, пока URL результата не печатается. Таким образом, мы все еще не видим интересную часть.
Опция -g должен "моделировать" видео загрузку в том смысле, что она делает сложную часть обнаружения, что полусекретный URL, печатает ее, но затем пропускает фактическую загрузку в конце. Существует подобная опция -s это не производит URL и кажется подобным иначе. Давайте предположим, что это достаточно подобно, если это берет в то же время; Мы должны проверить это.

$ 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, таким образом, нормально заменять их для тестирования.
Более интересный то, что мы получили более вывод теперь. И это печатается с интересной синхронизацией: строки печатаются с подобной задержкой друг с другом, таким образом, кажется, что они о действиях, которые на самом деле занимают время, мы ищем.
Из сообщений загружаются по крайней мере две веб-страницы. Но мы можем предположить, что слово "страница" не будет означать единственный Запрос HTTP и единственный документ HTML.

Что мы изучали?

Основной момент, работа программы на самом деле занимает время, это не ожидает чего-то или зависает.
Кроме того, мы видим, что несколько шагов занимают подобное количество времени. Нет очень для вычисления, таким образом, это - сетевые распространения в прямом и обратном направлениях в некотором роде, сложение.
Это означает, задержка нашего соединения важна только здесь. Пропускная способность соединения просто не важна.

Если Вы сделали бы свое интернет-соединение быстрее, таким образом, оно может передать данные в удвоенной скорости - который не помог бы вообще. Но если можно поправиться ping времена, которые сделают его намного быстрее.
Это не во времена 'ping' Вашему интернет-провайдеру, хотя; время ping полностью к YouTube это, что вопросы - и могут быть не возможны изменить.

Интересно, для следующего шага, загружая видео, требования для быстрой строки являются точно противоположным: задержка не релевантна вообще, и пропускная способность действительно имеет значение.


Не усталый уже?

Хотите, чтобы еще больше деталей поняло то, что время, действительно тратят на?
Следующий шаг должен был бы проследить HTTP-соединение; я подозревал бы, что это может показать намного больше распространений в прямом и обратном направлениях, чем два для перенаправлений, например. Вы могли использовать wireshark, или регистрирующийся Прокси HTTP, или strace просто считать системные вызовы соединения или записи.

На сегодняшний день мы оба глубоко достаточно изучили кроличью нору сетей.

9
ответ дан 16 November 2019 в 15:33

Просто сделайте a:

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

Источник

6
ответ дан 16 November 2019 в 15:33

Могла бы быть другая причина. youtube-dl распределяется как заархивированное приложение Python. Каждый раз, когда Вы выполняете его, это извлекает его и затем выполняет его.

можно вручную извлечь его с эти unzip команда. Тогда выполненный __main__.py, когда Вы работали бы youtube-dl. На низком приводимом в действие компьютере, как Пи, которое заметно повысит Вашу производительность.

1
ответ дан 16 November 2019 в 15:33

Другие вопросы по тегам:

Похожие вопросы: