Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » youtube-dl | yt-dlp (Часть 2)

Модерирует : gyra, Maz

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71

Открыть новую тему     Написать ответ в эту тему

Maz



Дед Мазай
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Предыдущее обсуждение: часть 1


Текущая версия: 2021.12.17


youtube-dl - бесплатная консольная программа для скачивания видео с YouTube и множества других сайтов.
Сейчас проект практически не развивается, скорость скачивания с YouTube не выше 100 кБ/сек - рекомендуется использовать yt-dlp.
официальные ночные сборки
 

 
youtube-dl с фиксом скорости, не требует SSE2
youtube-dl с фиксом скорости (другой вариант)
неофициальные ночные сборки youtube-dl  
 
 
 






yt-dlp - активный форк youtube-dl, рекомендуется к использованию.
Цели проекта: добавление новых функций, исправление известных проблем. Есть различия в поведении от основного проекта.
 
ytdl-patched - пока не понятный форк yt-dlp
 
yt-dlp для Windows XP x86
форк yt-dlp, есть вариант для Windows XP x86
примеры для начинающих (англ)
некоторые шаблоны и в чем-то более детальная документация, чем на оф-сайте (англ)
 
 
Графические интерфейсы

  • MediaDownloader (2023)
  • Metube (web-UI)
  • Tartube (2023)
  • Videomass (2023)
  • Vividl (2023)
  • youtube-dl-gui (murrty, 2022)
  • youtube-dl-gui (oleksis, 2023)
  • Stacher (2023)
     
    Полезное

  • ffmpeg.exe - yt-dlp/FFmpeg-Builds
  • BAT-ник от DeZz
  • кнопки от notinthewoods
  • BAT-ник, Downloader, расширения от 351878
  • Youtube Format IDs  
     


  • Всего записей: 38878 | Зарегистр. 26-02-2002 | Отправлено: 09:08 17-02-2024 | Исправлено: 351878, 17:25 14-03-2024
    RazorX911

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Проблема этого злополучного GitHub в том, что под WinXP на многих базах он даже в список файлов не заходит, несчастный просто ходит кругами, не делает никаких файлов доступными, они не появляются. (Он выбран из репозитория GitHub. Есть хорошие, есть плохие.) Если файлов много и он отображает их онлайн, отображаются первые 12 элементов, а остальные даже нет. , даже если человек нажмет на них, будет выбрана опция «Показать элементы». Как в исходном репозитории YT-DLP, так и в репозитории «nicolaasjan» EXE-файлы версий x86 и/или x86_XP часто обозначаются как файлы 13 или более поздних версий. Другими словами, без прямых ссылок они недоступны, их нельзя скачать с XP. Для их загрузки вам понадобится как минимум Win7 и более новый браузер.

    Всего записей: 41 | Зарегистр. 01-06-2011 | Отправлено: 16:12 27-04-2024
    notinthewoods



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    greeple

    Цитата:
    файл ps1 переводишь в ansi, или в UTF-16LE и всё норм

    Опа.. Слона я и не приметил) Спасибо за подсказку. Привык, что текстовые документы по умолчанию создаются в UTF-8 и как бы уже не обращаешь внимания на этот момент.
     
    TomasAnders
    К вопросу относительно версий yt-dlp в виде .exe или .zip - ну, теперь на крайней версии скрипта yt-dlp запускается только при записи прямого эфира. Запросы к URL канала и обработку ответа делает PowerShell своими средствами. В режиме мониторинга на некоторых каналах yt-dlp может неделями не запускаться)
    Что касается этого:

    Цитата:
    Вот интересно, как он себя поведёт в случае если стрим по каким-то причинам прервётся (например алгоритмы ютуба заблокируют трансляцию если обнаружат "неприемлемый" контент), а потом через минуту снова начнётся по новой, то есть уже новый стрим на этом же канале?

    Если стрим прервется, то процесс ffmpeg.exe, запущенный процессом yt-dlp.exe (потому как запись прямого потока ведет именно ffmpeg) завершится. А вот как себя поведет в этом случае процесс yt-dlp.exe - я не знаю. Это практика покажет. Не факт, что и процесс yt-dlp.exe завершится. Тогда это плохо. Процесс будет бесполезно висеть. Зависнет и скрипт в этом случае.
     
    Алгоритм работы скрипта таков, что после завершения процесса yt-dlp.exe будет переход к следующей команде - таймауту и далее по новой запускается в работу функция "Monitoring". И в этом случае уже неважно, с прежним ID или новым пойдет стрим. Скрипт будет искать последний по дате и с меткой "LIVE".
     
    Добавлено.
    Впрочем, если исходить из имитации ситуации в Диспетчере задач, то больше склоняюсь к позитиву в этом вопросе. Несколько раз проделал такой трюк: вручную (через пункт меню "Снять задачу") завершал процесс ffmpeg.exe, и тут же автоматически исчезал из списка процессов и yt-dlp.exe - т.е. скрипт, как и положено, уйдет в отсчет таймаута в штатном режиме.
    Так что, думаю, скрипт не будет зависать в случае блокировки стрима или неожиданной остановки трансляции по техническим причинам на стороне стримера. Хотя, повторяю, практика покажет..
     
    Если уж так дотошно разбираться, то чем физически отличается друг от друга неожиданное завершение трансляции от обычного с поклонами и поцелуями на прощание? ))
     
    Кстати, когда в Диспетчере задач вручную остановить ffmpeg.exe, то не будет произведен требуемый ремукс из ts в mp4. Файл будет сохранен на диске хоть и с расширением .mp4, но по факту это будет Format: MPEG-TS
    В реальной ситуации при окончании трансляции на YouTube, ffmpeg закончит ремукс, как положено.

    Всего записей: 498 | Зарегистр. 31-01-2015 | Отправлено: 20:40 27-04-2024 | Исправлено: notinthewoods, 21:21 27-04-2024
    RazOne707

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    notinthewoods

    Цитата:
    то не будет произведен требуемый ремукс из ts в mp4
    В реальной ситуации при окончании трансляции на YouTube, ffmpeg закончит ремукс, как положено.

    Чуть дополню: Из ts не просто ремукс происходит, так как ремукс это смена контейнера.
    Дополнительно происходит fix, когда само содержимое изменится в размере, лишние фрагменты частей у файла собираемый из обрезков удаляются.  
    Кстати размеры солидно потом отличаются, почти 1/5 разницы (может это будет кому-то важно)

    Всего записей: 1264 | Зарегистр. 06-10-2023 | Отправлено: 06:13 28-04-2024 | Исправлено: RazOne707, 06:31 28-04-2024
    TomasAnders



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А есть разница как загружать: с командой --no-part  или без? И как лучше? И почему?
     
    Добавлено:
    Но самое главное, хотел спросить: А ШО ЭТО ТАКОЕ??
     
       
     
     
       
     
    Этот PowerShell всю память оперативную сжирает! При каждом запросе/проверке стрима в эфире сжирается часть оперативки. За полчаса почти Гиг сожрал этот PowerShell . Это как понимать?  
    Проверил в диспетчере файлов и картина на лицо. Кстати, там в ноуте (на винде) у меня получается два PowerShellа. Один который родной вместе с виндой по умолчанию, он голубой иконкой обозначен. А другой PowerShell (тёмно-синей иконкой обозначен) я скачал и установил последней версии с сайта микрософт. Через него скрипт и работает, делая запросы каждые 30 сек. И каждый раз при запросе оперативка сжирается. Ужас какой-то!!!

    Всего записей: 120 | Зарегистр. 05-09-2017 | Отправлено: 10:04 28-04-2024 | Исправлено: TomasAnders, 11:33 28-04-2024
    greeple

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    TomasAnders
    с флагом сразу пишет в файл, без - в промежуточный файл, если закрыть консоль или будет какая-то ошибка, то надо будет их собирать как-то вместе
    и ты уже здесь спрашивал же Программы для скачивания потокового/онлайн видео (Часть 2)
     
    Добавлено:

    Цитата:
    Этот PowerShell всю память оперативную сжирает!

    да вообще не должен был
    может надо  
    $response
    $content
    $match
    очищать каждый раз, хз, это вопрос к notinthewoods

    Всего записей: 4320 | Зарегистр. 11-02-2020 | Отправлено: 11:37 28-04-2024
    TomasAnders



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    с флагом сразу пишет в файл

    Да не пишет оно сразу в готовый файл! Всё равно по частям пишет. Просто частей немного меньше.  
     
    PS И вопрос мой не в чём разница, а что лучше? В чём преимущества и недостатки записи так и этак? Может пускай бы оно без команды --no-part писало? Так меньше ресурсов потребляется? И стабильность работы увеличивается? Или как? Или разницы нет абсолютно никакой с технической точки зрения, а не в плане "там по частям, а там целиком"? И не целиком оно, а тоже по частям качает, хоть и с командой --no-part, просто с командой --no-part частей чуть меньше создаётся во время скачивания.

    Всего записей: 120 | Зарегистр. 05-09-2017 | Отправлено: 11:45 28-04-2024 | Исправлено: TomasAnders, 11:52 28-04-2024
    los

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Дополнительно происходит fix, когда само содержимое изменится в размере, лишние фрагменты частей у файла собираемый из обрезков удаляются.  
    Кстати размеры солидно потом отличаются, почти 1/5 разницы (может это будет кому-то важно)

    неверный вывод. Дело не в fix, а в том, что сам контейнер ts содержит много избыточной информации для устойчивости.

    Всего записей: 7362 | Зарегистр. 08-09-2001 | Отправлено: 13:13 28-04-2024
    RazOne707

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    los

    Цитата:
    неверный вывод. Дело не в fix, а в том, что сам контейнер ts содержит много избыточной информации для устойчивости.

    какой еще вывод ? при фиксе эти данные и удаляются, если есть вопросы к терминологии, то все вопросы к  разработчику yt-dlp, у которого это называется fixup

    Всего записей: 1264 | Зарегистр. 06-10-2023 | Отправлено: 13:24 28-04-2024 | Исправлено: RazOne707, 13:39 28-04-2024
    los

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    RazOne707, при изменении контейнера с ts на mp4  с тем что вы называете fix или без этого размер как правило уменьшается из-за того что сам контейнер ts имеет больший размер, а не audio, video потоки в нем содержащиеся.
    Для понимания в чем неверность вывода извлеките aac и h264 из ts и из mp4
    и сравните их размеры.  

    Всего записей: 7362 | Зарегистр. 08-09-2001 | Отправлено: 13:36 28-04-2024
    RazOne707

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    los
    Не "лишние данные", а сжатие видео происходит от ключевых кадров, и такие кадры + зависящие последующие кадры в потоковом видео невозможно передать как они есть в файле или прямом потоке непрерывно как в dash

    Цитата:
    Для понимания

    Без комментариев...

    Всего записей: 1264 | Зарегистр. 06-10-2023 | Отправлено: 13:38 28-04-2024 | Исправлено: RazOne707, 13:45 28-04-2024
    los

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    RazOne707
    ffmpeg -i foo.mp4 -c copy foo.ts
     
    stat -f%z foo.mp4 foo.ts
    16383842
    18489800
    разница в размере достаточно существенная.
     
    ffmpeg -i foo.mp4 -c copy foo.h264
    ffmpeg -I bar.ts -c copy bar.h264
     
    stat -f%z foo.h264 bar.h264
    12315411
    12315411
     
    Для смены контейнера и извлечения потоков можете использовать другие программы, а не ffmpeg - результат будет столь же нагляден.

    Всего записей: 7362 | Зарегистр. 08-09-2001 | Отправлено: 13:49 28-04-2024
    RazOne707

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    los

    Цитата:
    разница в размере достаточно существенная.

    я как бы про это и писал, не ?
    а с потока ютуба будет еще более существенная , не c 16 до 18, а ~ c 13-14 до 18
    и зависит это от сложности сцен и ключевых кадров соответственно, где в фрагментах будут повторяющиеся данные для их раздробления в одинаковые файлы
     
    Зачем мне рассказывать очевидные вещи ? Причем те, что я и написал ?

    Всего записей: 1264 | Зарегистр. 06-10-2023 | Отправлено: 13:56 28-04-2024 | Исправлено: RazOne707, 14:03 28-04-2024
    los

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    RazOne707

    Цитата:
    я как бы про это и писал, не ?

    нет, вы писали что это результат fix. Я вам пытаюсь объяснить что и без fix размер уменьшится.

    Всего записей: 7362 | Зарегистр. 08-09-2001 | Отправлено: 14:03 28-04-2024
    RazOne707

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    los

    Цитата:
    нет, вы писали что это результат fix. Я вам пытаюсь объяснить что и без fix размер уменьшится.

    Это результат fixup в yt-dlp. В другом приложении можно и по другому обозвать. Как это не обзови - это "исправление", когда повторы в фрагментах удаляются
    А remux - это просто смена контейнера, который в ffmpeg можно сделать и без фикса добавив ключ --fixup never, так как по дефолту этот фикс автоматически применяется и размер останется не измененным и больше, чем должен быть не в ts
     

    Всего записей: 1264 | Зарегистр. 06-10-2023 | Отправлено: 14:05 28-04-2024 | Исправлено: RazOne707, 14:26 28-04-2024
    euheny



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    RazOne707

    Цитата:
    Не "лишние данные", а сжатие видео происходит от ключевых кадров, и такие кадры + зависящие последующие кадры в потоковом видео невозможно передать как они есть в файле или прямом потоке непрерывно как в dash  

    както запутанно выражаешься
    может подругому как?
     
    проще говоря что лишнего в тс?

    Всего записей: 4080 | Зарегистр. 22-11-2006 | Отправлено: 14:33 28-04-2024
    RazOne707

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    euheny

    Цитата:
    проще говоря что лишнего в тс?

    А проще куда:
    1. Принцип сжатия видео - берутся Full (опорные) кадры и от них уже зависящие - чтобы размер был меньше
    2. Потоковое видео "подается" пользователю фрагментами одного фиксированного размера
    3. При дроблении в потоковом видео - получается что оставляют в начале и в конце таких фрагментов повторы данных - Данные увеличиваются
    4. При склейке в один файл - эти данные не нужны и fixup (который автоматически по дефолту при ремуксе hls) удаляются - Данные приходят в исходный размер
    5. При --fixup never этого фикса не будет, что по дефолту разработчик включил
     
    Remux - смена контейнера, fixup (автоматический в yt-dlp) - удаление повторных данных в потоке, где обычно ~20MB файл становится ~15MB.
     
    A. Кто записывает себе на хранение потоковое видео, тому обязательно закрывать окно консоли правильно, а именно: нажимать Ctrl+C и подтверждать закрытие итд итп (если в скриптах, то чтобы до конца отрабатывало) - fixup будет происходить.
    Б. Кому не нужны лишние файловые операции и просмотр одноразовый - то добавить ключ --fixup never

    Всего записей: 1264 | Зарегистр. 06-10-2023 | Отправлено: 14:38 28-04-2024 | Исправлено: RazOne707, 14:59 28-04-2024
    euheny



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    RazOne707

    Цитата:
    Потоковое видео

    а м3у8 это потоковое?
    или только тс

    Всего записей: 4080 | Зарегистр. 22-11-2006 | Отправлено: 16:07 28-04-2024
    RazOne707

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    euheny

    Цитата:
    а м3у8 это потоковое?

    Это файлик на несколько килобайт, в котором содержатся ссылки (или тех. инфа необходимая для работы в браузере, парсере) на эти части ts.
    Может содержать ссылки на просто цельные файлы с разным разрешением и в таком случае не потокового видео.

    Всего записей: 1264 | Зарегистр. 06-10-2023 | Отправлено: 17:07 28-04-2024 | Исправлено: RazOne707, 17:12 28-04-2024
    greeple

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    TomasAnders
    Цитата:
    Да не пишет оно сразу в готовый файл! Всё равно по частям пишет.

    пишет в готовый, если закрыть ffmpeg в консоли, то файл останется один, если закрыть yt-dlp, то качать будет ffmpeg дальше, в тот же файл
    не суть
    на все остальные вопросы отвечено уже в теме по скачиванию видео
     
    попробуй такой (набросал как сумел, за дальнейшими правками если понадобится, к кому нибудь обратишься кто шарит в vbs\jscript cmd и т.д.)

    Код:
    @if (@a==@b) @end /*
     
    :: fetch.bat <url>
    :: fetch a web page
     
    @echo off
    >nul chcp 65001
    setlocal
    if "%~1"=="" goto usage
    echo "%~1" | findstr /i "https*://" >NUL || goto usage
     
    set "URL=%~1"
    for /f "delims=" %%I in ('cscript /nologo /e:jscript "%~f0" "%URL%"') do (
        rem process the HTML line-by-line
        echo(%%I
    )
    goto :EOF
     
    :usage
    echo Usage: %~nx0 URL
    echo     for example: %~nx0 http://www.google.com/
    echo;
    echo The URL must be fully qualified, including the http:// or https://
    goto :EOF
     
    JScript */
    var wsarg = WSH.Arguments(0);
    WShell = WScript.CreateObject("WScript.Shell");
    w(WShell);
     
     
    function w(wh){
        while (xhr(wsarg)!=true) {WSH.Sleep(30000)};
        wh.Run ("yt-dlp.exe --no-part --playlist-end 1 " + wsarg,1,true);
            WSH.Sleep(50)
        w(wh);
    };
    function xhr(warg){var x=new ActiveXObject("Microsoft.XMLHTTP");
    x.open("GET",warg,true);
    x.setRequestHeader('User-Agent','XMLHTTP/1.0');
    x.send('');
    while (x.readyState!=4) {WSH.Sleep(50)};
    if (x.responseText.match(/"LIVE"/g)){
    return true;
    }else {
    return false;
    };
    };

    Это батник, который вызывает jscript, который написан в нём же
    Запуск с аргументом, аргумент это ссылка типа https://www.youtube.com/@Wylsacom/streams

    Код:
    test.bat https://www.youtube.com/@Wylsacom/streams

    После запуска скрипт раз в 30 секунд проверяет стрим (я это дело не проверил, не на чем было, но должен работать) WSH.Sleep(30000) тут в миллисекундах
    Если стрим есть, то запускает yt-dlp с --no-part --playlist-end 1 и в качестве ссылки эту же ссылку с которой запущен батник.
    Если путь надо свой, или ещё какие ключи, добавляй свои. Если в них есть кавычки, то их надо экранировать, и слэш тоже

    Код:
    wh.Run ("yt-dlp.exe --no-part --playlist-end 1 -o \"C:\\Users\\greeple\\Desktop\\yt\\%(title)s.%(ext)s\" " + wsarg,1,true);

    Так как это плейлист, поэтому как и в первом варианте notinthewoods вызывается эта же ссылка и берётся первое видео. Обычно там на первом видео стрим, если нет нескольких стримов.
    Далее если стрим оборвался или закончился, проверяется заново. Как только стрим заработает начнётся заново. И вот надо потестить на нормальных стримах, пока я тестил отруб ffmpeg он сразу начинал запись снова, потому что канал стримит и задержку WSH.Sleep(50) я не добавлял, это сейчас в коде добавил, пока больше не тестил.  
    В общем посмотри как оно. Закончить проверку как обычно CTRL+C, но тут ещё просит подтвердить Y, видимо надо запускать скрипт cscript /nologo ... с каким то ключом хз, ну и так норм.
     
    скрипт очень быстро работает, поэтому на самом деле тут  

    Код:
    function w(wh){
        while (xhr(wsarg)!=true) {WSH.Sleep(30000)};
        wh.Run ("yt-dlp.exe --no-part --playlist-end 1 " + wsarg,1,true);
            WSH.Sleep(50)
        w(wh);
    };

    WSH.Sleep(50) можно смело делать 3000 (3 секунды) чтобы было время остановить стрим, а то ты только нажал CTRL+C, а он уже новый запускает (ну если стрим идёт и ты вручную заканчиваешь)
    может есть вариант отслеживать нажатие вручную кнопки и чтобы вышел из функции, но это уже к спецам

    Всего записей: 4320 | Зарегистр. 11-02-2020 | Отправлено: 19:49 28-04-2024 | Исправлено: greeple, 20:32 28-04-2024
    TomasAnders



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    greeple
    Хорошо, спасибо! Потэщу, опробирую.  
     
    Добавлено:

    Цитата:
    а то ты только нажал CTRL+C, а он уже новый запускает (ну если стрим идёт и ты вручную заканчиваешь)

    Ну вообще-то мне желателен такой вариант скрипта чтоб работал автономно вообще. Вот допустим такая ситуация: в такое-то время назначен стрим, но я в это время нахожусь на работе и сидеть за компом мониторить нет возможности. Поэтому автоматика сама должна делать своё дело. То есть дома включен ноут 24/7 и там запущен скрипт который абсолютно незаметно и ненапряжно в ноуте работает и мониторит нужный канал ютуба. И вот как только стрим начался, то запускается программа yt-dlp и с самого начала (это важно! поэтому обязательно там у меня применяется флаг --live-from-start) начинает качать стрим с эфира. После стрима корректно сохраняет файл и далее продолжает нести боевое дежурство.

    Всего записей: 120 | Зарегистр. 05-09-2017 | Отправлено: 20:20 28-04-2024
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71

    Компьютерный форум Ru.Board » Компьютеры » Программы » youtube-dl | yt-dlp (Часть 2)


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru