Блог им. empenoso

Как посмотреть интервью с Тимофеем Мартыновым через телевизор

Я знаю что тема написания скрипта для скачивания видео с Ютуба не тема Смартлаба, но я захотел посмотреть интервью с Тимофеем Мартыновым через телевизор и вот во что это вылилось: как за 6 промтов к ChatGPT создать Python скрипт, скачивающий видео с YouTube для просмотра на телевизоре через медиа центр Kodi.

Как посмотреть интервью с Тимофеем Мартыновым через телевизор

Последние месяцы Ютуб работает с перебоями: через сеть мобильного оператора вроде работает, но при подключении к сети проводного интернет-провайдера чаще всего ничего посмотреть нельзя, хотя в новостях что-то промелькнуло насчёт возобновления работы, но лично у меня ничего не поменялось.

Я использую свободный медиацентр Kodi для просмотра своей коллекции фильмов и сериалов, создавая домашний кинотеатр без ежемесячной абонентской платы. Это достигается за счёт того, что все файлы уже хранятся на собственном сетевом хранилище с локальным доступом или записаны прямо в памяти Kodi, который может быть установлен практически на любой платформе.

Раньше на Kodi можно было напрямую отправить YouTube ссылку и посмотреть любое видео. С августа 2024 года этот вариант больше не работает. Короткие видео можно посмотреть с телефона, но вот длинные интервью или подкасты так смотреть или слушать неудобно. К тому же телевизором можно управлять через Алису — она подключена к Home Assistant.

Конечно, чтобы скачать видео с Ютуба существует множество программ, но скачивается только сам видео файл и он будет отображаться в базе Kodi без обложки и описания. Вручную создавать обложку и описание и тратить на это своё время не вариант — зачем?

Разбираюсь как за 6 промтов к ChatGPT создать Python скрипт, скачивающий видео с YouTube и генерирующий описание и фанарт для Kodi.

Статья получилась длинная, потому что полностью приведены запросы и ответы, поэтому сделал содержание:

Промт №1: предлагаемая библиотека pytube не работает

Промт №2: предлагаемая библиотека yt-dlp требует аутентификацию для скачивания

Промт №3: ошибки в коде

Промт №4: видео и звуковая дорожка по отдельности

Промт №5: Kodi не распознаёт описания в .nfo файле

Промт №6: заработало

Итоговый вариант на GitHub

Промт №1: предлагаемая библиотека pytube не работает

<code>Действуй как опытный программист Python. Напиши скрипт, который будет скачивать видео с сервиса Ютуб в максимальном качестве.

На входе ссылка например "<iframe width="560" height="315" src="https://www.youtube.com/embed/_lvcEUi1MtE" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>".

На выходе .mkv файл.

Дополнительно сгенерируй .nfo файл описания этого видео используя данные заголовка, 
описания и обложки видео. .nfo файл нужен чтобы загрузить эти данные в 
базу Kodi.

Добавляй все комментарии на русском языке, продолжайте со мной общение на английском.</code>

Вот скрипт Python, использующий библиотеку pytube для загрузки видео YouTube в максимальном качестве и создания файла .nfo с метаданными для Kodi. Для работы с видео YouTube вам нужно будет установить pytube:

pip install pytube

По запросу в сценарий включены комментарии на русском языке:

Как посмотреть интервью с Тимофеем Мартыновым через телевизор

Объяснение кода

  1. Загрузка видео:
  • Использует pytube для загрузки и скачивания видео в самом высоком разрешении.
  • Выходной файл сохраняется в формате .mkv.
  1. Создание файла .nfo:
  • Извлекает метаданные, такие как заголовок, описание и URL миниатюры.
  • Загружает миниатюру видео как cover.jpg и включает ее в файл .nfo.
  • Сохраняет файл .nfo в том же каталоге, что и видео.
  1. Удобное управление каталогами:
  • Обеспечивает организованную структуру каталогов с папкой downloads.
  1. Русские комментарии:
  • Все комментарии написаны на русском языке, чтобы подробно объяснить каждый шаг.

Дайте мне знать, если вам нужны улучшения или объяснения!

Промт №2: предлагаемая библиотека yt-dlp требует аутентификацию для скачивания

<code>Эта библиотека не работает и возвращает ошибку:</code>
Как посмотреть интервью с Тимофеем Мартыновым через телевизор

Ошибка, с которой вы столкнулись, указывает на то, что библиотека pytube вышла из строя из-за изменения API YouTube или структуры потоковой передачи, что является распространенной проблемой для библиотек, полагающихся на обратную разработку внутренних механизмов YouTube. Вот почему такие библиотеки часто ломаются, пока их сопровождающие не обновят их.

Альтернативное, надежное решение — использовать yt-dlp, мощный и активно поддерживаемый форк youtube-dl. Он хорошо подходит для загрузки видео с YouTube и других платформ. Вот как это реализовать:

Шаги:

  1. Установите yt-dlp:

pip install yt-dlp

  1. Скрипт Python:

Ниже приведен обновленный скрипт, использующий yt-dlp для загрузки видео в максимальном качестве и создания файла .nfo:

Как посмотреть интервью с Тимофеем Мартыновым через телевизор

Основные характеристики:

Основные характеристики:

  1. yt-dlp:
  • Автоматически извлекает видео и аудио наилучшего качества и объединяет их в файл .mkv.
  • Создает файл .info.json с метаданными (например, заголовок, описание, миниатюра).
  1. .nfo Файл:
  • Анализирует файл .info.json на предмет метаданных видео.
  • Загружает миниатюру и включает ее путь в файл .nfo.
  1. Обработка ошибок:
  • Обеспечивает корректную остановку скрипта в случае возникновения проблем (например, отсутствие метаданных JSON).
  1. Повторно используемая структура:
  • Скрипт можно легко адаптировать для пакетной загрузки или расширить для дополнительных функций.

Почему yt-dlp?

  • Активно поддерживается и регулярно обновляется.
  • Поддерживает широкий спектр форматов и опций.
  • Надежен для загрузки видео YouTube, даже когда другие библиотеки не справляются.

Запустите скрипт и дайте мне знать, как он работает!

Промт №3: ошибки в коде

<code>Какая-то ошибка - что мне сделать?</code>
Как посмотреть интервью с Тимофеем Мартыновым через телевизор

Ошибка указывает на то, что YouTube требует дополнительной проверки (например, входа в систему) для загрузки видео. Обычно это происходит, когда:

Ошибка указывает на то, что YouTube требует дополнительной проверки (например, входа в систему) для загрузки видео. Обычно это происходит, когда:

  1. Видео имеет возрастные ограничения или помечено как требующее дополнительной проверки.
  2. YouTube подозревает необычную активность и запускает проверку CAPTCHA или бота.

Чтобы решить эту проблему, вам необходимо предоставить аутентифицированные файлы cookie для yt-dlp, что обходит эти ограничения.

Решение: Используйте файлы cookie браузера

Шаг 1: Экспортируйте файлы cookie из браузера

  1. Установите расширение Cookies.txt для своего браузера:
  1. Перейдите на YouTube и войдите в свою учетную запись.
  2. Откройте видео, которое хотите загрузить, и используйте расширение для экспорта файлов cookie. Сохраните файл cookie (например, cookies.txt) в рабочем каталоге.

Шаг 2: Измените скрипт

Обновите скрипт, чтобы передать файл cookie в yt-dlp:

Как посмотреть интервью с Тимофеем Мартыновым через телевизор

Вызовите функцию, указав путь к файлу cookie:

Как посмотреть интервью с Тимофеем Мартыновым через телевизор

Шаг 3: Запуск скрипта

  1. Сохраните файл cookies.txt в том же каталоге, что и ваш скрипт, или укажите правильный путь.
  2. Запустите скрипт еще раз. Теперь он должен работать без дополнительной проверки.

Примечания

  1. Сохраняйте файлы cookie в безопасности: ваш файл cookie содержит конфиденциальные данные. Не делитесь им и не оставляйте его доступным для других.
  2. Обновление файлов cookie: если срок действия файлов cookie истек, повторите шаг 1, чтобы создать новый cookies.txt.
  3. Альтернатива: вы можете использовать параметр --cookies-from-browser для прямого получения файлов cookie из вашего браузера, если он поддерживается.

Сообщите мне, если это решит вашу проблему!

Промт №4: видео и звуковая дорожка по отдельности

<code>Приведи пожалуйста полный файл ответа. Нет ошибки, но и нет загруженного видео:</code>
Как посмотреть интервью с Тимофеем Мартыновым через телевизор

Ваш скрипт выглядит хорошо структурированным, но, похоже, в нем не хватает нескольких критических моментов для обеспечения правильной работы:

Ваш скрипт выглядит хорошо структурированным, но, похоже, в нем не хватает нескольких критических моментов для обеспечения правильной работы:

  1. Отсутствует импорт requests: скрипт использует requests.get для загрузки миниатюры, но не импортирует библиотеку requests.
  2. Отладка загрузки видео: если в выходном каталоге видео не отображается, это может быть связано со следующими причинами:
  • Неправильный файл cookie.
  • Недостаточные разрешения для команды yt-dlp.
  1. Обеспечение проверки файла метаданных: проверка .info.json может завершиться неудачей, если каталог содержит несколько видео. Убедитесь, что вы проверяете правильный файл метаданных.

Вот исправленная и улучшенная версия скрипта:

Полный скрипт с корректировками

Как посмотреть интервью с Тимофеем Мартыновым через телевизор

Ключевые улучшения

  1. Библиотека запросов:
  • Добавлены необходимые import requests.
  • Добавлена обработка ошибок при загрузке миниатюры.
  1. Улучшенные сообщения об ошибках:
  • Улучшены сообщения об исключениях для лучшей отладки.
  1. Гарантированное соответствие файла метаданных:
  • Теперь гарантируется явная привязка .info.json к загруженному видео.
  1. Разрешения и зависимости:
  • Убедитесь, что yt-dlp установлен и доступен в терминале. Запустите pip install yt-dlp.

Дополнительные примечания

  • Файл cookie: Убедитесь, что файл cookies.txt правильно экспортирован из вашего браузера (выполнен вход в YouTube).
  • Отладка: если видео не отображается в ./downloads, убедитесь, что yt-dlp может быть запущен из терминала с помощью той же команды.
  • Журнал ошибок: любые RuntimeError или отсутствующие файлы теперь будут вызывать описательные ошибки.

Дайте мне знать, если вам нужны дополнительные разъяснения!

Промт №5: Kodi не распознаёт описания в .nfo файле

<code>У меня скачалось отдельно видео и отдельно звуковая дорожка:</code>
Как посмотреть интервью с Тимофеем Мартыновым через телевизор

Проблема возникает из-за предупреждения о том, что ffmpeg не установлен. Без ffmpeg yt-dlp не может объединить отдельные видео- и аудиодорожки в один файл, что приводит к отдельным загрузкам для видео- и аудиопотоков.

Проблема возникает из-за предупреждения о том, что ffmpeg не установлен. Без ffmpeg yt-dlp не может объединить отдельные видео- и аудиодорожки в один файл, что приводит к отдельным загрузкам для видео- и аудиопотоков.

Вот как решить проблему:

Шаги по устранению проблемы

  1. Установите ffmpeg:
  • ffmpeg требуется для объединения видео- и аудиодорожек.
  • Вы можете установить его следующими способами в зависимости от вашей ОС:

В Windows:

  • Загрузите последнюю сборку ffmpeg с официального сайта: ffmpeg.org.
  • Извлеките загруженный файл и добавьте каталог bin в PATH вашей системы:
  • Щелкните правой кнопкой мыши «Этот компьютер» > Свойства > Дополнительные параметры системы > Переменные среды.
  • Отредактируйте переменную Path в «Системных переменных» и добавьте путь к папке ffmpeg/bin.
Как посмотреть интервью с Тимофеем Мартыновым через телевизор

В Linux:

sudo apt updatesudo apt install ffmpeg

В macOS:

brew install ffmpeg

  1. Проверьте установку ffmpeg:
  • Откройте терминал или командную строку и выполните:

ffmpeg -version

  • Если установка выполнена правильно, вы должны увидеть сведения о версии ffmpeg.
Как посмотреть интервью с Тимофеем Мартыновым через телевизор
  1. Повторите загрузку видео:
  • Запустите скрипт еще раз или вручную повторите попытку, используя:

yt-dlp -f bestvideo+bestaudio --merge-output-format mkv -o "./downloads/%(title)s.%(ext)s"

  1. Объединение уже загруженных файлов:

Если вы уже загрузили видео- и аудиодорожки, вы можете объединить их вручную с помощью ffmpeg. Выполните следующую команду в терминале (при необходимости измените пути к файлам):

ffmpeg -i video.mp4 -i audio.m4a -c:v copy -c:a aac output.mkv

Замените video.mp4 и audio.m4a на фактические имена файлов ваших видео- и аудиодорожек.

Следующие шаги в вашем скрипте

После того, как вы убедитесь, что ffmpeg установлен:

  • Видео и аудио будут автоматически объединены, когда вы используете команду yt-dlp с опцией --merge-output-format в вашем скрипте.

Дайте мне знать, если вам нужна помощь с установкой или тестированием!

Промт №6: заработало

<code>Спасибо, всё заработало, но Kodi не распознаёт описания.
Для того чтобы Kodi распознавал обложку файл должен заканчиваться -fanart.jpg, а сейчас .info.jpg.
Для того чтобы Kodi распознавал описание файл должен заканчиваться .nfo, а сейчас .info.nfo.

Вот выходные данные скрипта:</code>
Как посмотреть интервью с Тимофеем Мартыновым через телевизор

Чтобы обеспечить совместимость с Kodi, нам нужно настроить скрипт так, чтобы изображение обложки и имена файлов .nfo соответствовали соглашениям Kodi. Вот обновленная версия скрипта:

Обновленный скрипт

Как посмотреть интервью с Тимофеем Мартыновым через телевизор

Ключевые изменения

  1. Переименование изображения обложки:
  • Изображение обложки теперь сохраняется с суффиксом -poster.jpg (например, One Track Mind — I Like You-poster.jpg).
  1. Переименование файла .nfo:
  • Файл .nfo теперь соответствует имени видеофайла без суффикса .info (например, One Track Mind — I Like You.nfo).

Пример вывода

После запуска скрипта вы должны увидеть:

[Объединение] Объединение форматов в «downloads\One Track Mind — I Like You.mkv» Удаление исходного файла downloads\One Track Mind — I Like You.f134.mp4 (передайте -k для сохранения) Удаление исходного файла downloads\One Track Mind — I Like You.f140.m4a (передайте -k для сохранения) Видео успешно загружено. Обложка сохранена: downloads\One Track Mind — I Like You-poster.jpg Файл .nfo успешно создан: downloads\One Track Mind — I Like You.nfo

Теперь Kodi должен распознать как метаданные видео, так и обложку.

Как посмотреть интервью с Тимофеем Мартыновым через телевизор

Итоговый вариант на GitHub

Подкаст на телевизоре

Выложил итоговый рабочий вариант на Гитхаб:

https://github.com/empenoso/YouTube-to-Kodi/

Итоги

Всего за 6 запросов и примерно полчаса времени можно сгенерировать рабочий код, не особенно вдаваясь в детали работы скрипта.

Автор:Михаил Шардин

25 ноября 2024 г.

★3
7 комментариев
У меня есть Youtube на телевизоре. Статью не читал. Хотя наверно стоило бы, не зря же она в разделе «торговые роботы» — видимо где-то внутри запрятано про торговлю и про роботов.
avatar
Replikant_mih, автор поста — то есть я — не могу назначить раздел или присвоить тэг. Это может сделать только модератор сайта.
Replikant_mih, 
я тоже не читал. YouTube на телике сейчас работает в штатном режиме, дочка смотрит свои мультики.
Дмитрий Овчинников, Ой, я совсем забыл, что ютуб может не работать).
avatar
Давно существует приложение youtube-dl для скачивания видео с ютуба. Я, правда, давно не пользовался. Может что-то изменилось за это время.
avatar
Riskplayer, github.com/ytdl-org/youtube-dl накрылось оно похоже

теги блога Михаил Шардин

....все тэги



UPDONW
Новый дизайн