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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117

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

Maz



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

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


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


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





yt-dlp - активный форк youtube-dl, рекомендуется к использованию. Минимальная версия Windows 8. Linux
Цели проекта: добавление новых функций, исправление известных проблем. Есть различия в поведении от основного проекта.
 
ytdl-patched - пока непонятный форк yt-dlp
 
 
форк yt-dlp есть вариант для Windows XP x86 и Windows 7
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 | Нюанс под Windows 7 раз два три
  • кнопки от notinthewoods
  • BAT-ник, Downloader, расширения от 351878
  • Youtube Format IDs  
  • Автоматическое скачивание комментариев к видеороликам Youtube с их преобразованием в удобный для чтения HTML-формат от PREVED
  • Примеры замены\удаления текста в названии файла
  • Обход корпоративных/провайдерских блокировок
  • Обход блокировок связанный с медиаконтентом - видео, аудио..
     

  • Всего записей: 39128 | Зарегистр. 26-02-2002 | Отправлено: 09:08 17-02-2024 | Исправлено: greeple, 14:30 29-10-2024
    www_world

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    D1D1D1D
    Почему-то просящие о помощи считают, что рутинную работу за них должен делать помощник.
    Подробнее...
    Посему, вот вам навскидку демонстрационный вариант, заведомо рабочий (из ком строки; для батника надо внести коррективы - батникофилы обязаны знать, как отче наш, какие именно, иначе батники им противопоказаны, как детям - спички), но не подогнанный под ваши точные хотелки, за их отсутствием

    Код:
    yt-dlp.exe --replace-in-metadata title "[\U0000002A\U0000005C\U0000002F\U0000003A\U00000022\U0000003F\U0000007C\U00000500-\U0010FFFF]" " " --replace-in-metadata title "^[ \.\,\-_\?\!;\:\#%&*@\^\~]+|(?<= ) +|[ \.\,\-_\?\!;\:\#%&*@\^\~]+$" "" -o %(title)+.50U.%(ext)s -P "C:\tmp" https://www.tiktok.com/@amo_borz/video/7372912660037291296

    (у меня скачивается без прокси и проч лабуды, но для своих интернетов подстраивайте)

    Всего записей: 494 | Зарегистр. 04-11-2018 | Отправлено: 03:35 04-06-2024 | Исправлено: www_world, 04:22 04-06-2024
    D1D1D1D

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    www_world
    У меня на Win10 и из ком. строки не работает этот код — ни с прокси, ни без. Пишет ошибку:
     
    "ERROR: the JSON object must be str, bytes or bytearray, not NoneType"

    Всего записей: 1443 | Зарегистр. 05-04-2010 | Отправлено: 04:06 04-06-2024
    www_world

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

    Цитата:
    "С:\tmp"  

    C - русская в комстроке. Замените или лучше полностью напишите свой выходной путь.

    Всего записей: 494 | Зарегистр. 04-11-2018 | Отправлено: 04:22 04-06-2024 | Исправлено: www_world, 04:27 04-06-2024
    D1D1D1D

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    www_world
    Что-то у меня через ВПН (opera-proxy.windows-amd64.exe) даже те ссылки, которые вчера скачивались - сегодня перестали скачиваться. Поэтому пока не могу потестировать ваш код, но все равно спасибо!

    Всего записей: 1443 | Зарегистр. 05-04-2010 | Отправлено: 16:18 04-06-2024
    www_world

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

    Цитата:
    Что-то у меня через ВПН (opera-proxy.windows-amd64.exe) даже те ссылки, которые вчера скачивались - сегодня перестали скачиваться.  

    Там же белым по черному написано

    Цитата:
    В настоящий момент видео недоступно

    Однако, непонятно другое - что вам мешает тестировать на другом видео?.. Да и прокси - существует более одного...
    ____________
    Просьба к остальным, проверить работоспособность ком строки выше на каком-нибудь ролике. Спасибо.

    Всего записей: 494 | Зарегистр. 04-11-2018 | Отправлено: 19:20 05-06-2024
    D1D1D1D

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    www_world
    Не знаю, какое видео в "настоящий момент недоступно". Да, сейчас уже тот акк удалён, но когда я тестировал - и видео было доступно (из браузера), и впн работал (у opera-proxy.windows-amd64 только один прокси). Так и не понял, почему скачивание не происходило.

    Всего записей: 1443 | Зарегистр. 05-04-2010 | Отправлено: 03:37 07-06-2024
    www_world

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    D1D1D1D
    На тиктоке был всего один замухрынный ролик и тот удалили... Тестировать больше не на чем...

    Всего записей: 494 | Зарегистр. 04-11-2018 | Отправлено: 03:57 07-06-2024
    unreal666



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вопрос по работе с yt-dlp из питона.
     
    При работе с exe-шником есть такие параметры, передающиейся через опцию --parse-metadata. Посмотрел исходники и так и не понял, как эту фигню передать в класс YoutubeDL в качестве опции. По исходникам данные для параметра --parse-metadata прохоодят несколько функций. (в том числе и main ). Как эту хрень решить.

    Всего записей: 6671 | Зарегистр. 14-02-2005 | Отправлено: 12:25 12-06-2024 | Исправлено: unreal666, 12:27 12-06-2024
    greeple

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

    Код:
    import json
    import yt_dlp
     
    URL = 'https://www.youtube.com/watch?v=BaW_jenozKc'
     
    # i See help(yt_dlp.YoutubeDL) for a list of available options and public functions
    ydl_opts = {}
    with yt_dlp.YoutubeDL(ydl_opts) as ydl:
        info = ydl.extract_info(URL, download=False)
     
        # i ydl.sanitize_info makes the info json-serializable
        print(json.dumps(ydl.sanitize_info(info)))

     
    Добавлено:
    или ты имеешь ввиду что там нет parse?
    parse использует те же поля что и output, можешь брать любые поля из любого места если там есть

    Всего записей: 5568 | Зарегистр. 11-02-2020 | Отправлено: 15:47 12-06-2024 | Исправлено: greeple, 15:50 12-06-2024
    unreal666



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    greeple
    да я смотрел даже изначально как передаются эти опции. Те. начал с файла __main__.py, который выполняет функцию main в __ini__. (правда я не понял, как в нее вообще аргументы передаются, если в файле __main__ она вызывается без аргументов)
    И так и не понял что куда впихнуть, чтобы не повлияло на другие мои опции. Напрямую main скорее не надо вызывать, т.к. это запустит попытку скачки чего либо (лишняя хрень).
     
    P.S. Часть строки для exe-шника:

    Код:
     
    --parse-metadata ":(?P<meta_synopsis>)" --parse-metadata ":(?P<meta_description>)" --parse-metadata "%(uploader|)s:%(meta_artist)s" --embed-metadata
     

    Кстати. Пробовал всякие замены (может и в моем случае тоже - через --parse-metadata), ни хрена не рабтало. А вот удаление этих метатегов (как в моем случае) работает.

    Всего записей: 6671 | Зарегистр. 14-02-2005 | Отправлено: 16:55 12-06-2024 | Исправлено: unreal666, 16:56 12-06-2024
    www_world

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

    Цитата:
    Часть строки для exe-шника:
    Код:
    --parse-metadata ":(?P<meta_synopsis>)" --parse-metadata ":(?P<meta_description>)" --parse-metadata "%(uploader|)s:%(meta_artist)s" --embed-metadata  

    А всю строку, включая url, можно увидеть? А также то, что вы хотите получить, как конечный результат выполнения всей конкретной строки?

    Всего записей: 494 | Зарегистр. 04-11-2018 | Отправлено: 18:39 12-06-2024 | Исправлено: www_world, 18:39 12-06-2024
    unreal666



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    www_world
    Изначальльно было:
     
    # C:\Users\unreal666\AppData\Roaming\youtube-dlg\youtube-dl.exe --newline --user-agent "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:70.0) Gecko/20100101 Firefox/71.0" -i --write-info-json --write-thumbnail --write-auto-sub -o "K:\Видео\Видеоинфа\Электротехника и IT (K)\@ Олег German\New Folder\%(title)s.%(ext)s" -f "(mp4)[width<1300]" --add-header "Accept-Language:ru-RU,en;q=0.9,ru;q=0.8" --add-header "Cookie:PREF=hl=ru&f1=60000000" --ffmpeg-location "D:\Programs\Coding\Video\ffmpeg\bin" --merge-output-format mp4 --no-playlist --no-check-certificate --no-write-playlist-metafiles --compat-options no-youtube-unavailable-videos --compat-options filename-sanitization --extractor-args youtube:lang=ru "https://www.youtube.com/здесь_канал_какой-то"
     
    Т.е. 720p и ниже и все это mp4+m4a.
     
    Потом когда что то там искал, добавил --parse-metadata ... чего-то там еще + --embed-metadata.
    Т.е. эти метаданные начал записывать в сам видеофайл. Но только изначально туда и все описание пихалось, что на хрен не вперлось. Что я только не делал. Да как в доке было описано по часто всяких замен.
    Помогло только то, что у тебя указано - это полное удаление этих данных.
     
    Кстати игралля с опциями типа -bv. Ожидал, что скачает в кодеком AV1 (там он точно был даже на 720p). Но скачивалось всегда с кодеком VP9. Оказалось что в данный момент AV1 ниже приоритет, чем у VP9.
     
    Поигрался с параментрами и все-таки скачал в AV1. Он был в 2 раза меньше размером. Сразу говорю - не сравнивал их между собой по качеству. Да и сравнить не  с чем - нужно изначальное видео.
     
    Добавлено:
    Еще добавка:
     
    Видео, с которым "игрался": https://www.youtube.com/watch?v=Fmdb-KmlzD8. Там до 4к.

    Всего записей: 6671 | Зарегистр. 14-02-2005 | Отправлено: 19:59 12-06-2024 | Исправлено: unreal666, 20:21 12-06-2024
    www_world

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    unreal666
    Извиняюсь, прочитал дважды, но не понял цели добавления ключей
    --parse-metadata ...  --embed-metadata.
    и конечной цели загрузки ("хочу на выходе то-то с тем-то", как максимум или как удовлетворительный для вас вариант)

    Всего записей: 494 | Зарегистр. 04-11-2018 | Отправлено: 21:33 12-06-2024 | Исправлено: www_world, 21:33 12-06-2024
    unreal666



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

    Код:
    --parse-metadata ":(?P<meta_synopsis>)" --parse-metadata ":(?P<meta_description>)"

    удаление описаний видео из метаданных, которые будут внедряться в конечный видеофайл

    Код:
    -parse-metadata "%(uploader|)s:%(meta_artist)s"

    Перекидывание из извлеченного поля uploader в поле метаданных meta_artist.

    Код:
    --embed-metadata

    Добавление получившихся метаданных в видеофайл. Описание я выкинул, потому что длинные они нафиг не нужны в видеофайле, тем более в двух полях сразу. А так в видеофайл внедряются url, дата загрузки, название видео и название канала (может еще что-то - не помню).

    Всего записей: 6671 | Зарегистр. 14-02-2005 | Отправлено: 17:07 15-06-2024 | Исправлено: unreal666, 17:12 15-06-2024
    www_world

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    unreal666
    я не знаю, к чему вы это пишите, при этом упорно не отвечая на вопросы, которые вам задают.
    Но могу написать, что мне удалось понять из всего вами написанного.
    А именно. у вас есть некая хотелка, раскрывать которую вы не желаете. Она связана со скачиванием, роликов посредством обсуждаемой программы. Стандартные (простые и хорошо описанные) варианты используемых ключей по неизвестным причинам вам не подходят. Поэтому вы пытаетесь методом слепого перебора подставалять ключи, которые внешне (по вашему мнению) могли бы решить вашу проблему. Однако, никогда ранее вы эти ключи не использовали, и вам неизвестен ни результат использования этих ключей для реальных случаев, ни синтаксис их использования.
    Как результат - у вас к изначальным нереализованным хотелкам добавились проблемы технического характера - типа "ваще не работает". И теперь ищите помощи..
    Конечно, вполне возможно, я чего-то важного не заметил, но мне ситуация видется именно так.

    Всего записей: 494 | Зарегистр. 04-11-2018 | Отправлено: 18:19 15-06-2024 | Исправлено: www_world, 18:20 15-06-2024
    unreal666



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    www_world
    нужные ключи я уже указал. Мне нужны инфа, как эти ключи применить/использовать напрямую в python-скрипте, потому что я хочу использовать именно через python-скрипт, а не exe-файл.
    Сейчас у меня опции для передачи в класс YoutubeDL такие:

    Код:
    {
        # 'playliststart': 1,
        # 'playlistend': 5,
        # 'playlistreverse': True,
        # 'format': '(mp4)[width<1300]',
        'format': 'bv[ext=mp4][width<1300][height<1300]+ba[ext=m4a]',  # -f "(mp4)[width<1300]"
        # 'format': '-',  # -f "(mp4)[width<1300]"
        'writeinfojson': True,
        'http_headers': {
            'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:70.0) Gecko/20100101 Firefox/71.0',
            'Accept-Language': 'ru-RU,en;q=0.9,ru;q=0.8',
            'Cookie': 'PREF=hl=ru&f1=60000000',},
        'progress_with_newline': True,
        'ignoreerrors': True,
        'writethumbnail': True,
        'writeautomaticsub': True,
        'ffmpeg_location': r'D:\Programs\Coding\Video\ffmpeg\bin',  # --ffmpeg-location "D:\Programs\Coding\Video\ffmpeg\bin"
        'merge_output_format': 'mp4',   # --merge-output-format mp4
        'noplaylist': True,             # --no-playlist
        'nocheckcertificate': True,     # --no-check-certificate
        'allow_playlist_files': False,  # --no-write-playlist-metafiles
        'compat_opts': {'filename-sanitization', 'no-youtube-unavailable-videos'},  # --compat-options no-youtube-unavailable-videos --compat-options filename-sanitization
        'extractor_args': {'youtube': {'lang': ['ru', 'en']}},  # --extractor-args youtube:lang=ru
        'outtmpl': {'default': os.path.join(DEST_DIR, '%(title)s.%(ext)s')},
        # 'no_warnings': True,
        'logger': MyLogger(),
        # 'quiet': True,
        # 'skip_download': True,          # Пропустить загрузку видео файлов
        # 'postprocessors': [{'key': 'FFmpegMetadata', 'add_chapters': True, 'add_metadata': True, 'add_infojson': 'if_exists',}],   # --embed-metadata
    }

    пока закоммеченная последняя строка - это и есть внедрение метаданных в видеофайл.
    Теперь надо разобраться с

    Код:
    --parse-metadata ":(?P<meta_synopsis>)" --parse-metadata ":(?P<meta_description>)" --parse-metadata "%(uploader|)s:%(meta_artist)s"

    Возможно придется делать через добавление обработчика как в примере в справке:

    Код:
    class MyCustomPP(yt_dlp.postprocessor.PostProcessor):
        def run(self, info):
            self.to_screen('Doing stuff')
            return [], info
     
     
    with yt_dlp.YoutubeDL() as ydl:
        # "when" can take any value in yt_dlp.utils.POSTPROCESS_WHEN
        ydl.add_post_processor(MyCustomPP(), when='pre_process')
        ydl.download(URLS)

    Всего записей: 6671 | Зарегистр. 14-02-2005 | Отправлено: 18:46 15-06-2024 | Исправлено: unreal666, 18:52 15-06-2024
    greeple

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    unreal666
    в этой ветке не пишут на питоне это тебе в другие ветки или на гитхаб к разрабам

    Всего записей: 5568 | Зарегистр. 11-02-2020 | Отправлено: 19:47 15-06-2024
    www_world

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    unreal666
    Со скриптами на питоне я вам не помогу. А относительно ключей могу заметить, что вам стоит подтянуть синтаксис их использования. На данный момент вы его не знаете в принципе, поскольку просто копипастите шаблоны. См. напр., тут
    Однако корректное использование ключей в ком строке, не означает автоматически корректного их использования в скрипте на питоне (как и в случае с батниками). Поэтому вам сначала нужно с ком строкой разобраться, а потом обратиться в тему по питону, чтобы приладить ее к скрипту.

    Всего записей: 494 | Зарегистр. 04-11-2018 | Отправлено: 19:52 15-06-2024
    unreal666



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

    Код:
    --parse-metadata ":(?P<meta_synopsis>)" --parse-metadata ":(?P<meta_description>)" --parse-metadata "%(uploader|)s:%(meta_artist)s" --embed-metadata

    запихать в скрипт. В словарь-опции при создании экземпляра класса YoutubeDL добавить ключ:

    Код:
    'postprocessors': [{
        'key': 'MetadataParser',
        'actions': [(yt_dlp.postprocessor.metadataparser.MetadataParserPP.interpretter, '', '(?P<meta_synopsis>)'), (yt_dlp.postprocessor.metadataparser.MetadataParserPP.interpretter, '', '(?P<meta_description>)'), (yt_dlp.postprocessor.metadataparser.MetadataParserPP.interpretter, '%(uploader|)s', '%(meta_artist)s')],
        'when': 'pre_process'
    }, {
        'key': 'FFmpegMetadata',
        'add_chapters': True,
        'add_metadata': True,
        'add_infojson': 'if_exists'
    }],

    Узнал запуском исходников yt-dlp с нужными ключами в режиме отладки через PyCharm и установкой точки останова на входе в методе __init__ этого YoutubeDL.
     
     
    Добавлено:
    P.S.
    Кстати можно и через обработчик, как в примере выше:

    Код:
    class MyCustomPP(yt_dlp.postprocessor.PostProcessor):
        def run(self, info):
            info['meta_synopsis'] = info['meta_description'] = ''
            info['meta_artist'] = info.get('uploader') or info.get('artist') or info.get('artists') or info.get('creator') or info.get('creators') or info.get('uploader_id') or ''
            return [], info
     
    ydl_opts = {
        'postprocessors': [{'key': 'FFmpegMetadata', 'add_chapters': True, 'add_metadata': True, 'add_infojson': 'if_exists' }, {'key': 'FFmpegConcat', 'only_multi_video': True, 'when': 'playlist'}],
    }
     
    with yt_dlp.YoutubeDL() as ydl:
        ydl.add_post_processor(MyCustomPP(), when='pre_process')
        ydl.download(URLS)

    Всего записей: 6671 | Зарегистр. 14-02-2005 | Отправлено: 22:05 15-06-2024 | Исправлено: unreal666, 22:05 15-06-2024
    www_world

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    unreal666
    Когда вы закончите совершенствования и добъетесь-таки своего, то было бы неплохо, если бы вы выложили какой-нибудь скачанный ролик, как пример  (с оригинальной ссылкой на него), удовлетворяющий всем вашим требованиям и содержащий всю информацию, которую вы хотите в него добавить посредством обсуждаемой в теме программы.  
    Тогда появится формальный смысл в ваших сообщениях в данной теме и возможно появятся ваши последователи.

    Всего записей: 494 | Зарегистр. 04-11-2018 | Отправлено: 23:13 15-06-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 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117

    Компьютерный форум 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