Заметки · 28.10.2022

Сравнение yt-dlp и youtube-dl

Посты на тему скачивания видео с видеохостингов с помощью утилиты 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.: архив с логами можно скачать здесь.