Библиотека для скачивания видео, видео для подписок и комментариев с Twitch.
$ npm я twitch-video-downloader
Библиотека FFMPEG необходима для перекодирования видеофайлов из m3u8 в mkv.
import { join } из "path";import { writeFileSync } из "fs";import { VideoDownloader, обеспеченияDirectoryExists } из "twitch-video-downloader";(async () => {try {const downloader = new VideoDownloader("https) ://www.twitch.tv/videos/800558240");downloader.on("progress-download", (progress) => console.log(`Загружено ${progress.toFixed(2)}%`));downloader.on("progress-transcode", (progress) => console.log(`Перекодировано ${progress. toFixed(2)}%`));downloader.on("start-download", (e) => console.log(`Загрузка началась! on `, e));downloader.on("start-transcode", () => console.log(`Транкодирование началось!`));// Получить все разрешения, доступные для этого видеоконста разрешения = await downloader.getVideoResolutionsAvailable();// Загрузить определенное разрешениеconst download = await downloader.download(resolves[0]);// Информация и путь к загруженным файлам hlsconsole.log(download);// Транскодированное видео, из HLS в MKVconst transcode = await downloader.transcode(download);// Информация и путь к закодированному файлу videoconsole.log(transcode);// Загрузка офлайн-комментариев Chatconst = await Downloader.downloadChat(); // Убедитесь, что каталог существует, если нет, создайте itensureDirectoryExists(join(__dirname, "./../downloads/chats"));// Сохранить все commentwriteFileSync(join(__dirname, `./../downloads/chats/${comments.vodID}.chat`), comment.content);} catch (ошибка) {console.log(error);}})() ;
Этот код может быть очень полезен для быстрого обзора библиотеки. Если вы клонируете репозиторий, вы сможете найти тот же файл по следующему пути.
twitch-video-downloader │ └───example │ index.ts
Как только зависимости проекта будут установлены с помощью
$ НПМ установить
Вы можете поиграть с этим файлом, изменив его и загрузив интересующие вас видео. Для запуска скрипта выполните следующую команду
$ npm запуск запуска:смотреть
Если вы хотите знать все, что делает библиотека, выполните следующую команду, чтобы запустить скрипт в режиме отладки.
$ npm run dev:смотреть
Или вы можете передать параметр отладки в параметрах
const downloader = new VideoDownloader("https://www.twitch.tv/videos/800558240", {debug: true});
VideoDownloader — основной класс библиотеки, точка входа для загрузки видео или общения в чате.
const defaultOptions = {clientID: "kimne78kx3ncx6brgo4mv6wki5h1ko",debug: false,downloadFolder:process.cwd(),oAuthToken: "",poolLimit: 20};const downloader = new VideoDownloader("https://www.twitch.tv/videos /800558240", параметры по умолчанию);
Вариант | Определение | По умолчанию |
---|---|---|
идентификатор клиента | Это параметр, используемый платформой Twitch, значение одинаковое независимо от того, какая учетная запись используется, поэтому вам, вероятно, не следует его менять. | кимне78kx3ncx6brgo4mv6wki5h1ko |
отлаживать | Для запуска библиотеки в режиме отладки будет создан файл debug.log, в котором будет сохраняться все, что делает библиотека. | ЛОЖЬ |
скачатьПапка | Папка, в которой будут сохраняться видео. По умолчанию это рабочий каталог | процесс.cwd() |
oAuthToken | Этот параметр очень важен, поскольку с его помощью вы сможете скачивать видео только для подписчиков. Это не волшебство: прежде чем вы сможете скачать видео, у вас уже должен быть доступ к видео в вашей учетной записи Twitch. | "" |
лимит пула | Это максимальные параллельные загрузки при загрузке видео. | 20 |
У вас есть два варианта: вы можете извлечь его из файлов cookie Twitch после входа в систему, это поле называется auth-token. Вот шаги, которые вы должны выполнить:
* Sign in to your Twitch account * With the Twitch tab open, open the chrome devtools (press f12) * With the devtools window open, now go to the application tab * Select 'https://www.twitch.tv' in the Cookies section * And look in the 'name' column for the field that says 'auth-token' and copy what is in the 'value' column
Второй вариант (он все еще в разработке, не рекомендуется) — использовать класс TwitchOAuth.
import { TwitchOAuth, LoginOptions } from "twitch-video-downloader";const loginDefaultOptions: LoginOptions = {authy_token: "", // Это единственная полезная опция. Используйте его, когда у вас активирована Двухфакторная аутентификация, скопируйте код из приложения Аутентификатор. Убедитесь, что код по-прежнему действителен при запуске этого методаclient_id: "kimne78kx3ncx6brgo4mv6wki5h1ko",remember_me: true,}const twitchOAuth = new TwitchOAuth();twitchOAuth.login("<ВАШ ПОЛЬЗОВАТЕЛЬ TWITCH>", "<ВАШ ПАРОЛЬ>", loginDefaultOptions ).then(async (oAuthToken) => {const downloader = new VideoDownloader("https://www.twitch.tv/videos/800558240", {oAuthToken: oAuthToken,});...});
Warning: THIS CLASS IS NOT YET FINISHED DEVELOPING, so problems may arise. And we have not yet developed the option to solve the catchas when Twitch asks you to log in IT IS RECOMMENDED THAT YOU USE THE FIRST METHOD TO GET YOUR OAUTH TOKEN FROM COOKIES BEFORE THIS METHOD
Название события | Описание | Параметры |
---|---|---|
прогресс загрузки | Событие вызывается каждый раз, когда обновляется ход загрузки. | десятичный |
прогресс-транскодировать | Событие вызывается каждый раз, когда обновляется ход перекодирования. | десятичный |
начать-скачать | Событие вызывается, когда начинается загрузка | { vodID: строка, качество: строка, путь к папке: строка} |
начать перекодировать | Событие вызывается при запуске транскодирования | пустота |
Пример регистрации ваших слушателей
const downloader = new VideoDownloader("https://www.twitch.tv/videos/800558240");downloader.on("<ИМЯ СОБЫТИЯ>", (param) => console.log(param));
const downloader = новый VideoDownloader("https://www.twitch.tv/videos/800558240");const разрешения = await downloader.getVideoResolutionsAvailable();
Функция возвращает массив со следующей информацией
[{качество: '1080p60',разрешение: '1920x1080',url: 'https://...index-dvr.m3u8'},{качество: '1080p',разрешение: '1920x1080',url: 'https: //...index-dvr.m3u8'},{качество: '720p60',разрешение: '1080x720',url: 'https://...index-dvr.m3u8'},...]
Эта функция позволяет вам загрузить определенное разрешение, в качестве параметра вам необходимо передать объект с полями качество, разрешение и URL.
const downloader = new VideoDownloader("https://www.twitch.tv/videos/800558240");const разрешения = await downloader.getVideoResolutionsAvailable();// Загрузить конкретное разрешениеconst download = await downloader.download(resolves[0]) ;
После завершения выполнения функции она возвращает объект со следующей информацией:
{vodID: '800558240', качество: '1080p60', путь к папке: 'D:Projectstwitch-video-downloaderdownloadsvideos800558240hls1080p60'}
Эта функция позволяет вам перекодировать видео, в качестве параметра вам необходимо передать объект с полями качество, разрешение и путь к папке, эти поля возвращаются методом загрузчика.
const downloader = new VideoDownloader("https://www.twitch.tv/videos/800558240");const разрешения = await downloader.getVideoResolutionsAvailable();const download = await downloader.download(resolves[0]);// Транскодировано видео из HLS в MKVconst transcode = await downloader.transcode(download);
Функция также получает необязательный второй аргумент в виде объекта с дополнительными настройками.
const transcode = await downloader.transcode(download, {deleteHslFiles: false, // Значение по умолчаниюoutputPath: "<РАБОЧИЙ КАТАЛОГ>/downloads/videos/<VIDEO ID>/mkv/", // Значение по умолчанию});
После завершения выполнения функции она возвращает объект со следующей информацией:
{vodID: '800558240', качество: '1080p60', filePath: 'D:Projectstwitch-video-downloaderdownloadsvideos800558240mkv1080p60.mkv'}
Эта функция позволяет загрузить из чата видео. Возвратом функции являются необработанные данные из API Twitch.
const downloader = new VideoDownloader("https://www.twitch.tv/videos/800558240");// Загрузить офлайн-чат.const comment = await downloader.downloadChat();
Часть кода взята из таких библиотек, как twitch-m3u8 и twitch-tools.