在之前不是写了一个啥下载m3u8视频的NodeJs的程序嘛, 总觉得每次下载都需要改代码炒鸡麻烦的有没有, 所以总是一直在想这写一个vue-cli, hexo 这种可以注册到CMD命令行的程序, 直接后面接上地址就可以直接下载视频的那种.
开始使用
首先我还是来介绍一下我这个npm的程序如何使用吧
1 | // 全局安装程序 |
没错就是这么简单的使用, 只需要全局安装好, 输入一行命令之后就可以实现解析m3u8视频, 并且并发进行下载储存在执行命令目录下面的/temp/目录下面.
下面会生成一个sh的脚本文件和json的日志文件, 下载失败或成功都会写入日志文件内, 只要安装了ffmpge执行sh文件就可以直接合并视频, 然后删除*.ts, *.m3u8这些缓存文件
踩坑说明
命令注册
首先就是注册命令行拉, 我们需要到项目下面的package.json文件里面添加如下代码
1
2
3"bin": {
"m3u8": "./bin/m3u8"
},
然后我们再创建/bin/m3u8 目录和文件, 输入以下内容
1 |
|
这样我们就已经给命令行关联上了我这个包程序, 只要全局安装然后输入m3u8命令就会直接运行到我的npm包m3u8-down
命令行带参
我去网上找了一下, nodejs的参数是从全局对象process.argv里面
`
数组的第一个元素process.argv[0]——返回启动Node.js进程的可执行文件所在的绝对路径
第二个元素process.argv[1]——为当前执行的JavaScript文件路径
剩余的元素为其他命令行参数
`
所以我就直接
1
const url = process.argv[2]
就可以得到后面的参数
储存文件目录
嗯,,, 开始我这储存文件都是直接使用全局变量__dirname来拼接
1
const filePath = path.join(__dirname, fileName)
结果发现无论我再那执行命令, 视频文件都会给我下载到代码目录里面, emmm
这种情况的话就需要获取到代码的执行路径了. 还是全局变量process里面
1
const filePath = path.join(process.cwd(), fileName)
这样的话我妈就可以得到代码的执行路径了
其他也没啥问题了, 基本的思路代码前面我都说清楚了