简单说说实现方案
-
首先要有演唱会的链接,使用ibili 这个库下载视频,也可以自己抓取视频链接请求下载,这里有很多方法。
-
将视频保存在本地后,整理出每一首歌曲对应的时分秒。我找的这个视频在某站评论中已经有人整理过了,所以我用 ibili 这个库将评论下载下来,在二次加工
拿到整理出在这个视频中每一首歌曲开始的时间和结束的时间,供后续剪切使用 -
整理出对应的歌曲数据后,我在这里先剪切出每首歌曲对应的视频阶段,在这里就要使用一个很重要的插件了 — ffmpeg,电脑上要装上这个exe程序,配置系统环境,然后在程序中调用它
// 这里我开了子进程去剪切视频 const {exec} = require("child_process") const data = [] // 这里是上面截图中的数据 data.forEach((item) => { exec( `ffmpeg -ss ${item.startTime} -t ${ endTime - item.startTime } -i 无与伦比.mp4 -vcodec copy -acodec copy ${item.name}-无与伦比.mp4 ` ); });
剪切视频使用以下命令
ffmpeg -ss 00:00:00 -t 00:00:30 -i input.mp4 -vcodec copy -acodec copy
output.mp4- -ss 指定从什么时间开始
- -t 指定需要截取多长时间
- -i 指定输入文件
-
到这里整理好了剪切出每首歌曲对应的视频了,使用 fs 模块读取保存下来的每一个文件,保存进数组中,遍历数组利用 ffmpeg 提取每个视频的音频
ffmpeg -i test.mp4 -f mp3 -vn test.mp3
- -i 表示input,即输入文件
- -f 表示format,即输出格式
- -vn表示vedio not,即输出不包含视频