use node.js download m3u8 to mp4 by thread pool.
npm install m3u8-multi-thread-downloader
const downloader = require('m3u8-multi-thread-downloader');
downloader.download({
url: 'https://www.hkg.haokan333.com/201903/07/qM3F7ntN/800kb/hls/index.m3u8',
processNum: 4, // 同时开启的线程数,线程不宜开的过多,否则容易造成资源无法正常下载的情况
filePath: 'video', // 所存放的文件夹
fileName: 'baby' // 视频资源的文件名
});
`
支持参数化的方式:
`
node --experimental-worker .\download.js --url=https://www.hkg.haokan333.com/201903/07/qM3F7ntN/800kb/hls/index.m3u8 --path=video --name=baobaby --deleteTemp=false --process=8
`
支持的参数有:
`
--url 下载的m3u8文件路径
--process 下载的线程数,不宜过多,4个很稳定,取决于服务器的并发措施
--path 文件存放路径, 默认为:video
--name 文件合并后的名称, 谨慎使用非英文字符, 默认为:video
--deleteTemp 是否在处理完抽删除临时文件, 默认为: true
`
下载时的进度展示:
`
Downloading:97% [=================================================================================================---] Current:101 Total:104 当前用时:54.2s 剩余时长:1.6
`
完整的运行日志:
`
node --experimental-worker .\download.js --url=https://www.hkg.haokan333.com/201903/07/qM3F7ntN/800kb/hls/index.m3u8 --path=video2 --name=baobaby --deleteTemp=false --process=8
已初始化线程池,线程数量为: 8
开始解析m3u8文件...
解析成功,开始下载...
Downloading:100% [====================================================================================================] Current:104 Total:104 当前用时:0.0s 剩余时长:0.0s
正在合并ts为mp4...
1. FFMPEG mp4 0处理完成.
2. FFMPEG mp4 1处理完成.
所有FFMPEG处理完成.
``