Посты на тему скачивания видео с видеохостингов с помощью утилиты YouTube-DL можно найти вот по этому тегу.
Всем хороша YouTube-DL, кроме одного — низкая скорость скачивания. Ни для кого не секрет, что это самое слабое место данной утилиты. Примечательно, что эта проблема проявляется только при скачивании как раз с того самого видеохостинга, название которого фигурирует в имени программы. В общем, неувязочка вышла…
В поисках альтернативы я набрёл на программу Yt-dlp и решил сравнить скорость скачивания видео этой утилиты с YouTube-DL в равных условиях для решения простой задачи.
Yt-dlp это форк YouTube-DL, основанный на YouTube-dlc. Написан Yt-dlp на Python (отсюда и такой postpic). Скачать его можно со странички релизов утилиты или по прямой ссылке. Для запуска утилиты не нужны какие-либо внешние библиотеки или компоненты Python. Распространяется программа в виде самодостаточного exe-файла.
Итак, задача: необходимо скачать представленный ниже ролик продолжительностью 5 минут 13 секунд в контейнер mp4 с высотой кадра равной 1080р, максимально возможным качеством аудиодорожки и избежать потокового кодирования или замены кодеков. Исключением здесь будет только микширование в конечный контейнер для которого потребуется ffmpeg.
Передача команд утилитам будет осуществляться c помощью PowerShell. Для замера времени выполнения скрипта я воспользовался командлетом Measure-Command. Скорость скачивания видео и время работы утилит будут отмечены в файле лога. Коды скриптов и логи выложу ниже. Поехали!
Спустя час и пару бокалов чая…
YouTube-DL справился с задачей за 54 минуты 58 секунд, но у него удалось сохранить видео только в формат webm. Какие только комбинации настроек я не использовал, но контейнера mp4 так и не получил. Вполне возможно, что я применил не корректную связку атрибутов опций и где-то программа обходила возникшее исключение. Впрочем, это всё же мелочи… А вот скорость скачивания едва превышала 90 KiB/s. Конечный файл весит 263 мегабайта.
Код тестового скрипта для YouTube-DL:
$time = Measure-Command {
$cmd = '-f ("bestvideo[height=1080]"/best) + bestaudio/bestvideo + bestaudio --merge-output-format mp4'
cd C:\test
.\youtube-dl.exe $cmd https://youtu.be/LXb3EKWsInQ | Out-File log_youtube-dl.txt -Append
}
$finish = $time.ToString()
Write-Host "Видео скачано за: $finish" -ForegroundColor Red
Read-Host "Нажмите любую клавишу для выхода..."
Yt-dlp управился за полминуты (33 секунды, если быть точным). Видео и аудио помещены в контейнер mp4. Размер файла остался таким же — 263 мегабайта. Скорость скачивания подскакивала до показателя в 10 MiB/s.
Код тестового скрипта для Yt-dlp:
$time = Measure-Command {
cd C:\test
.\yt-dlp.exe -f 'bv*[height=1080]+ba' --merge-output-format mp4 https://youtu.be/LXb3EKWsInQ | Out-File log_yt-dlp.txt -Append
}
$finish = $time.ToString()
Write-Host "Видео скачано за: $finish" -ForegroundColor Red
Read-Host "Нажмите любую клавишу для выхода..."
Думаю, выводы очевидны.
Пока что не тестировал взаимодействие Yt-dlp с другими видеохостингами, но в рамках поставленной задачи — утилита превзошла все ожидания.
В ближайшем будущем выкачу пост с PS1-скриптом для скачивания роликов с помощью Yt-dlp.
P.S.: архив с логами можно скачать здесь.