持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情
前言
昨天有个朋友跟我说想让我帮忙下载一个抖音无水印的视频,我想了想然后随便在网上找了个解析去水印的工具,把无水印的视频发给他了,发过去之后我就开始思索,这个东西我自己能不能搞一个玩玩。
分析
作为一个前端开发,我对这个就很感兴趣,在一番搜索查阅之后,我发现好像挺简单的。
首先拿到抖音分享的视频链接,这是一个短连接,输入到浏览器地址栏
访问这个地址后就能拿到长链接,红框里的就是这个视频的对应id
拿到id之后再掉这个接口,item_ids = 刚刚拿到的这个id
https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=${videoId};
访问这个地址你就能拿到一个JSON字符串,这里建议解开后看,会更明白
JSON解析后如下图
其中item_list的第一条(其实总共也只有一条)中的video对应的就是视频信息,music对应的是背景音乐信息,share_info对应份分享的信息。
如图,video下的play_addr就是视频播放地址信息,其中的url_list的第一条就是有水印的视频地址,只需要将地址中的playwm改为play就可以得到无水印的视频信息,wm是水印watermark的意思,这就能取得无水印的视频地址了,所以只需要用代码把这几个步骤给实现就可以了。
代码
我这里比较懒,先将视频的url写固定了,重要的是实现这个功能,代码我是直接写在了之前的项目中,在本地跑了一下,没有放到服务器测试。
// douyin_remove_water_mark
async function douyinRWM (params) {
const { url } = params;
const longUrl = await got.get(url);
const videoId = longUrl.url.substr(29, 19);
console.log("videoId",videoId)
const api = `https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=${videoId}`;
const res = await got.get(api);
const info = JSON.parse(res.body)
// console.log("info",info)
const { music, video, share_info } = info.item_list[0];
let mp3 = music.play_url.uri;
let mp4 = video.play_addr.url_list[0].replace('playwm', 'play');
let title = share_info.share_title;
console.log('【mp3】',mp3)
console.log('【mp4】',mp4)
console.log('【title】',title)
return { mp3, mp4, title };
}
再次强调一下,我这里视频地址写死了,直接在本地调用的。
定义参数,调用方法
const data = {
url:'https://v.douyin.com/YjNKTBA/'
}
douyinRWM(data)
效果
运行结果如下:
打开音频地址
打开视频地址