Skip to content

ストリーミング動画をダウンロードする方法

Terminal window
streamlink -o output.ts {url} best
ffmpeg -i output.ts -c copy output.mp4

基本はこれでいいが、たまにPNGフォーマットとして偽装しているものがある。その場合はだいたい先頭8バイトを無視すればいい。ffmpeg-i オプションでスキップするバイト数を指定できる。

Terminal window
ffmpeg -i subfile,,start,8,end,0,,:output.ts

FFmpegのオプションメモもある。

基本的にはヘッダー等を加えて m3u8 ファイルのURLを指定するだけでいいがオプションは先頭から適用されていくので順番はとても重要。

Terminal window
headers=$'Accept-Encoding: gzip\r\nUser-Agent: mozilla/xxx\r\n'
ffmpeg -headers "$headers" -i {url} -c copy -bsf:a aac_adtstoasc output.mp4

たまに、m3u8 ファイルに列挙されるURLにパラメータが付いている場合があって、その場合 ffmpeg はパラメータ部分を無視してしまうので事前にダウンロードしなければならない。

Terminal window
curl -o list.m3u8 {url}
sed -i '/^#/!s|^|'"$url"'/|'
ffmpeg -protocol_whitelist file,https,tcp,tls \
-i ./list.m3u8 -c copy -bsf:a aac_adtstoasc output.mp4