Twitchからのビデオ、サブスク用のビデオ、コメントをダウンロードするためのライブラリ。
$ npm i twitch-video-downloader
ビデオ ファイルを m3u8 から mkv にトランスコードするには、FFMPEG ライブラリが必要です
import { join } from "path";import { writeFileSync } from "fs";import { VideoDownloader, ensureDirectoryExists } from "twitch-video-downloader";(async () => {try {const downloader = new VideoDownloader("https ://www.twitch.tv/videos/800558240");downloader.on("progress-download", (進捗状況) => 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(`トランスコードが開始されました!`));// このビデオで利用可能なすべての解像度を取得しますconst解像度 = await downloader.getVideoResolutionsAvailable();//特定の解像度をダウンロードしますconst download = await downloader.download(resolutions[0]);//ダウンロードされた hls ファイルの情報とパスconsole.log(download);// トランスコードされたビデオ、HLS から MKV へconst transcode = await downloader.transcode(download);// トランスコードされた videoconsole.log(transcode) の情報とパス;// オフライン チャットをダウンロードconst comments = await downloader.downloadChat();// ディレクトリが存在することを確認し、存在しない場合は create itensureDirectoryExists(join( __dirname, "./../downloads/chats"));// すべてのコメントを保存writeFileSync(join(__dirname, `./../downloads/chats/${comments.vodID}.chat`), comments.content);} catch (error) {console.log(error);}})();
このコードは、ライブラリの概要を簡単に把握するのに非常に役立ちます。リポジトリのクローンを作成すると、次のパスに同じファイルが見つかります。
twitch-video-downloader │ └───example │ index.ts
プロジェクトの依存関係がインストールされると、
$npmインストール
このファイルを変更して、興味のあるビデオをダウンロードして遊ぶことができます。スクリプトを実行するには、次のコマンドを実行します
$ npm run start:watch
ライブラリの動作をすべて知りたい場合は、次のコマンドを実行してスクリプトをデバッグ モードで実行します。
$ npm run dev:watch
または、オプションでデバッグパラメータを渡すこともできます
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"、デフォルトオプション);
オプション | 意味 | デフォルト |
---|---|---|
クライアントID | これは Twitch プラットフォームで使用されるパラメーターであり、どのアカウントが使用されても値は同じであるため、おそらく変更しないでください。 | kimne78kx3ncx6brgo4mv6wki5h1ko |
デバッグ | ライブラリをデバッグ モードで開始するには、ライブラリの実行内容がすべて保存される debug.log ファイルが作成されます。 | 間違い |
ダウンロードフォルダー | ビデオが保存されるフォルダー。デフォルトは作業ディレクトリです | プロセス.cwd() |
o認証トークン | このパラメータを使用すると、加入者のみにビデオをダウンロードできるため、このパラメータは非常に重要です。これは魔法ではありません。ダウンロードするには、Twitch アカウントでビデオにアクセスする必要があります。 | 「」 |
プール制限 | ビデオをダウンロードする際の最大同時ダウンロード数です。 | 20 |
オプションは 2 つあり、ログイン後に Twitch Cookie から抽出できます。フィールドは 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
2 番目のオプション (まだ開発中のため、推奨されません) は、TwitchOAuth クラスを使用することです。
import { TwitchOAuth, LoginOptions } from "twitch-video-downloader";const loginDefaultOptions: LoginOptions = {authy_token: "", // これが唯一の有用なオプションです。 Two-factor をアクティブ化している場合に使用し、Authenticator アプリケーションからコードをコピーします。このメソッドを実行するときにコードがまだ有効であることを確認してくださいclient_id: "kimne78kx3ncx6brgo4mv6wki5h1ko",remember_me: true,}const twitchOAuth = new TwitchOAuth();twitchOAuth.login("<YOUR TWITCH USER>", "<YOUR PASSWORD>", loginDefaultOptions ).then(非同期(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
イベント名 | 説明 | パラメータ |
---|---|---|
進行状況-ダウンロード | ダウンロードの進行状況が更新されるたびにイベントが呼び出されます | 10進数 |
プログレストランスコード | このイベントは、トランスコードの進行状況が更新されるたびに呼び出されます。 | 10進数 |
開始-ダウンロード | ダウンロードが開始されるとイベントが呼び出されます | { vodID: 文字列、品質: 文字列、フォルダパス: 文字列} |
トランスコードの開始 | トランスコードが開始されるとイベントが呼び出されます | 空所 |
リスナーを登録する例
const downloader = new VideoDownloader("https://www.twitch.tv/videos/800558240");downloader.on("<イベント名>", (param) => console.log(param));
const downloader = new 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(resolutions[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(resolutions[0]);// トランスコード済みビデオ、HLS から MKVconst へのトランスコード = await downloader.transcode(download);
この関数は、追加設定を含むオブジェクトの形式でオプションの 2 番目の引数も受け取ります。
const transcode = await downloader.transcode(download, {deleteHslFiles: false, // デフォルト値outputPath: "<作業ディレクトリ>/downloads/videos/<ビデオ ID>/mkv/", // デフォルト値});
関数の実行が完了すると、次の情報を含むオブジェクトが返されます。
{vodID: '800558240'、品質: '1080p60'、ファイルパス: 'D:Projectstwitch-video-downloaderdownloadsvideos800558240mkv1080p60.mkv'}
この機能を使用すると、ビデオのチャットをダウンロードできます。関数の戻り値は Twitch API からの生データです
const downloader = new VideoDownloader("https://www.twitch.tv/videos/800558240");// オフライン チャットをダウンロードconst comments = await downloader.downloadChat();
コードの一部は twitch-m3u8 や twitch-tools などのライブラリからのものです