如何下载网站视频

现在的在线视频网站为了打击盗版、保护资源/网络流量,不再直接使用mp4等视频格式,而是转而使用m3u8文件(播放索引列表)+ts文件(视频分段技术),其中有的视频还用了加密,下面简单展示下如何下载ts文件并合并为mp4

m3u8索引

从浏览器的dev tool找到m3u8文件的连接并下载,该m3u8文件内有所有的ts文件列表,你可以将他们复制出来,通过编辑器补全制作成完整的url,通过下载器批量下载

未加密

如果视频没有加密(m3u8文件中#EXT-X-KEY字段为空),那么在下载所有ts文件后,可以直接用linux命令合并

1
2
3
4
# ts段一般都有固定格式,如example_1.ts
echo 'ts_link_in_m3u8_file_'{number_first..number_end}.ts | tr "" "\n" > tslist
# 将所有相关的ts文件合并
while read line; do cat $line >> the_final_video.mp4; done < tslist

到这里就不需要再往下看了

加密

如果视频加密(m3u8文件中#EXT-X-KEY字段不为空),如下所示

1
2
3
4
5
6
7
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-KEY:METHOD=AES-128,URI="https://hentai.com/xxxxxx",IV=0xa746ff934e7fff621ba2cf5a32608914
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-TARGETDURATION:6
#EXTINF:5.881,
https://hentai.com/xxxxxxyyyyyyyy.ts

处理步骤:

  1. 下载必须的文件
  2. 修改m3u8文件
  3. 使用ffmpeg合并

下载必须的文件

  1. 通过浏览器dev tool找到m3u8文件url
  2. 复制m3u8文件内所有ts文件地址到下载器下载,这里可能还需要通过编辑器补全url
  3. 复制m3u8文件内记录的key的地址(从EXT-X-KEY字段获取链接)到下载器下载,可进一步重命名,如改为crypt.key,该文件文件大小一般是16字节

修改m3u8文件

  1. 修改key的地址,将url改为本地文件路径
  2. 如果ts文件url是http链接,那么也改为本地文件路径

示例如下:

1
2
3
4
5
6
7
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-KEY:METHOD=AES-128,URI="crypt.key",IV=0xa746ff934e7fff621ba2cf5a32608914
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-TARGETDURATION:6
#EXTINF:5.881,
xxxxxxyyyyyyyy.ts

使用ffmpeg合并

1
ffmpeg -allowed_extensions ALL -protocol_whitelist "file,http,crypto,tcp" -i example.m3u8 -c copy the_final_video.mp4

done

参考文档

记一次加密的ts视频下载