某天看片时发现网址中的视频为m3u8格式,无法直接保存,那在前端如何使用爬虫去抓取网站中的视频并完成转换呢?
实现思路:
使用cheerio去获取网页中的html,拿到视频的src路径,使用ffmpeg模块去完成m3u8转mp4
完整代码:
const axios = require('axios');
const cheerio = require('cheerio');
const fs = require('fs');
const path = require('path');
const m3u8stream = require('m3u8stream');
const ffmpegStatic = require('ffmpeg-static');
const ffmpeg = require('fluent-ffmpeg');
ffmpeg.setFfmpegPath(ffmpegStatic.path);
async function run() {
const { data } = await axios.get('https://www.example.com/', {
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
}
});
const $ = cheerio.load(data);
const m3u8Url = $('video').attr('src'); // 请根据实际情况修改选择器
if (m3u8Url) {
const output = path.join(__dirname, './output.mp4');
const stream = m3u8stream(m3u8Url);
ffmpeg(stream)
.inputFormat('mpegts')
.output(output)
.on('end', () => {
console.log('转换完成');
})
.on('error', (err) => {
console.error('转换失败', err);
})
.run();
} else {
console.error('未找到 m3u8 视频链接');
}
}
run();
顺便推荐一个m3u8在线转换的工具网站:
https://blog.luckly-mjw.cn/tool-show/m3u8-downloader/index.html