Я хочу получить URL, используя youtube-dl и опцию «simulate» -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
Но проблема в том, что запрос URL занимает около 7-8 секунд.
Есть ли способ, чтобы он мог быть быстрее?
networking
performance
downloads
download-speed
youtube-dl
бхарат кумар редди боджа
источник
источник
Ответы:
Время тратить на работу
Команда не зависает и не ждет, что что-то напрасно тратит время,
она действительно работает, что требует времени; Скорее всего, это займет некоторое время, сложив несколько небольших сетевых задержек. Но также может быть, что есть задержки на стороне YouTube, которые складываются.
Это просто время, необходимое для загрузки необходимого HTML-кода;
Команде нужно сделать как минимум два HTTP-запроса, один за другим и, возможно, больше.
Поэтому, если что-то идет медленно, оно уже умножается на количество запросов.
Для меня это занимает 1,5 секунды на очень быстрой линии - это не так уж далеко от 8 секунд.
Как узнать
Я покажу команды, которые я использовал, чтобы узнать:
Чтобы сделать примеры более аккуратными, мы используем переменную для URL:
Мы хотим измерить продолжительность команд; При использовании команды
time
необходимо следить за тем, чтобы не перепутать команду и встроенную оболочку. Мы используем небольшую функцию, чтобы сделать строки короче:Ваша команда записывает URL-адрес видеофайла (урезанный до 80 столбцов):
Давайте измерим время, необходимое для запуска на моем компьютере:
Хорошо, полторы секунды. Быстрее, чем в вопросе, но не намного быстрее. Но как он проводит время? Может быть, он скачивает видео каким-то скрытым способом и удаляет его? Видео 11 минут в 360p. Простая загрузка без параметров занимает около 13 секунд - в десять раз дольше.
Нужно присмотреться, с подробным вариантом
-v
:О, есть некоторая задержка, прежде чем строки '[debug]' будут напечатаны. Похоже,
youtube-dl
тратит время на настройку конфигурации. Это четверть секунды или около того, а не задержка, которую мы ищем. Но что мы можем извлечь из этого, так это то, чтоyoutube-dl
сама реализация может быть медленной.После сообщений ничего не происходит, пока не будет напечатан URL-адрес. Поэтому мы до сих пор не видим интересной части.
Опция
-g
заключается в том, чтобы «смоделировать» загрузку видео в том смысле, что она выполняет сложную часть поиска этого полусекретного URL-адреса, печатает его, но затем в конце пропускает фактическую загрузку. Существует аналогичная опция-s
, которая не выводит URL, и кажется похожей в противном случае. Давайте предположим, что это достаточно похоже, если это займет примерно столько же времени; Нам нужно это проверить.Хорошо,
-s
занимает то же время-g
, что и заменить их для тестирования.Более интересно то, что мы получили больше продукции сейчас. И это напечатано с интересным временем: линии печатаются с одинаковой задержкой друг к другу, поэтому кажется, что они о действиях, которые на самом деле занимают время, которое мы ищем.
Из сообщений загружаются как минимум две веб-страницы. Но мы можем предположить, что слово «страница» не будет означать один HTTP-запрос и один HTML-документ.
Что мы узнали?
Суть в том, что работа программы действительно требует времени, она не ждет чего-то или зависает.
Кроме того, мы видим несколько шагов, занимающих одинаковое количество времени. Рассчитывать особо нечего, так что в некотором роде это обходные пути в сети.
Это означает, что задержка нашей связи важна только здесь. Пропускная способность соединения просто не имеет значения.
Если вы сделаете свое интернет-соединение быстрее, чтобы оно могло передавать данные с удвоенной скоростью - это не помогло бы вообще. Но если вы можете получить лучшие
ping
времена, это сделает это намного быстрее.Однако речь идет не о том, чтобы «пинговать» своего провайдера интернет-услуг; Время пинга до YouTube - это то, что имеет значение - и может быть невозможно изменить.
Интересно, что на следующем шаге, при загрузке видео, требования к быстрой линии абсолютно противоположны: задержка вообще не актуальна, а пропускная способность действительно имеет значение.
Еще не устал?
Хотите узнать подробности, на что действительно тратится время?
Следующим шагом будет отслеживание HTTP-соединения; Я подозреваю, что он может показать гораздо больше циклических переходов, чем два, например, для перенаправлений. Вы можете использовать
wireshark
или протокол HTTP-прокси, илиstrace
просто подсчитать системные вызовы для подключения или записи.На сегодняшний день мы оба достаточно глубоко заглянули в кроличью нору сетей.
источник
Просто сделайте:
Источник
источник
Может быть другая причина.
youtube-dl
распространяется в виде zip-приложения Python. Каждый раз, когда вы запускаете его, он извлекает и запускает его.Вы можете вручную извлечь его с помощью
unzip
команды. Тогда беги,__main__.py
как бегиyoutube-dl
. На маломощном компьютере, таком как Pi, это заметно повысит вашу производительность.источник