HLS(HTTP Live Streaming)は、Apple社が開発した動画の「ストリーミング配信」のための規格。
数十年前、私はAndroidのHLS実装にバグがあることを突き止め修正パッチをGoogleにコントリビューション(直接口頭で提供したので履歴はなし)した記憶がある。
HLSでは、動画を複数のビットレート(例: Low/Mid/High)でセグメント化し、m3u8ファイルを通じてクライアントに配信する。
このファイルには、異なるビットレートの動画ストリームやセグメントのURLが記載されており、クライアントが適応的に適切な品質を選択できる。
これを適応的ビットレート配信(Adaptive Bitrate Streaming)という。
「TVer」「YouTube」「Dailymotion」「にこにこ動画」などのストリーミング動画をダウンロード、保存、またはコピーしたいと思う人は多い。
Google検索で引っかかるのは、有料ソフトのアフィリエイトの糞サイトwwwばかり。
早くAI検索の時代が来て駆逐されて欲しい……。
一方で「TVerRec」などの多くのOSSツールも存在する。

だけど、私は このツールに頼らない。
いろんな技やテクニックを駆使して、いかに短時間で多くを得 いかに低料金でアレにするかに命をかける
© マンガ パソコン通信入門/荻窪 圭/永野 のりこ
この言葉を学生時代からずっと胸にして生きてる。
実践で学ぶ HLS Adaptive Streamingの全体構造
動画等々のダウンロード、ハッキング、クラックなど技術知識は一通りある。
しかし、私の持てるすべての秘伝技を習得したあかつきには、チミは犯罪者になってしまうやもしれん
© マンガ パソコン通信入門/荻窪 圭/永野 のりこ
Chromeだと「デベロッパーツール」を立ち上げ、「Network」でフィルタに「m3u8」と記載して、動画サイトをReloadする。
ここで「m3u8」の通信が見つかればHLSなので、その後の処理を進めていく。
マスタープレイリスト(master.m3u8)
複数の映像・音声バリアント(異なる画質や音質のストリーム)を定義。
クライアント(再生デバイス)はこのファイルをもとに、ネットワーク状況やデバイス性能に応じて適切なストリームを選択する。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#EXTM3U #EXT-X-VERSION:6 # 音声トラック定義 #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="Japanese",DEFAULT=YES,AUTOSELECT=YES,LANGUAGE="ja",URI="audio/audio_128k.m3u8" # 映像バリアント(複数の画質) #EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,CODECS="avc1.640028,mp4a.40.2",AUDIO="audio" video/video_1080p.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=2800000,RESOLUTION=1280x720,CODECS="avc1.64001f,mp4a.40.2",AUDIO="audio" video/video_720p.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=1400000,RESOLUTION=854x480,CODECS="avc1.64001e,mp4a.40.2",AUDIO="audio" video/video_480p.m3u8 |
映像プレイリスト(video_1080p.m3u8)
特定の解像度(例: 1080p)の映像ストリームのセグメント情報を提供。
クライアントはこのファイルをもとに、映像の個々のセグメント(.tsファイル)をダウンロードして再生。
|
1 2 3 4 5 6 7 8 9 10 |
#EXTM3U #EXT-X-VERSION:5 #EXT-X-PLAYLIST-TYPE:VOD #EXT-X-TARGETDURATION:6 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-KEY:METHOD=AES-128,URI="https://example.com/keys/video_key.key",IV=0x12345678901234567890123456789012 #EXTINF:6.006, https://cdn.example.com/video/1080p/segment_0.ts #EXTINF:6.006, https://cdn.example.com/video/1080p/segment_1.ts |
音声プレイリスト(audio_128k.m3u8)
音声プレイリストは、音声ストリームのセグメント情報を提供。
映像と独立して管理され、マスタープレイリストから参照。
|
1 2 3 4 5 6 7 8 9 10 |
#EXTM3U #EXT-X-VERSION:5 #EXT-X-PLAYLIST-TYPE:VOD #EXT-X-TARGETDURATION:6 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-KEY:METHOD=AES-128,URI="https://example.com/keys/audio_key.key",IV=0x98765432109876543210987654321098 #EXTINF:5.995, https://cdn.example.com/audio/128k/segment_0.ts #EXTINF:5.995, https://cdn.example.com/audio/128k/segment_1.ts |
具体的なダウンロード方法
最近は暗号化されている事が多い。
でも「AES-128-CBC」が標準であり、FFMPEGさえインストールすれば難なく動画の結合はできる。
ということで、PowerShellとBatファイルでスクリプトを作成した。
ビデオと音声のm3u8を保有している事が前提だけどね。
ソースコードは最下ページ参照。
おわりに
FFMPEGは非常に高機能なソフトウェアで私は大学生の時期から利用してる。
結合だけでなく、無圧縮で動画を切り出ししたりと必須のツールだ。
この程度の技術は朝飯前。実装はAIだけどね。
ソースコード
GitHubにソースコードは公開。このまま動作する。







