nodejs+抖音去水印分析与实现

1,630 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情

前言

昨天有个朋友跟我说想让我帮忙下载一个抖音无水印的视频,我想了想然后随便在网上找了个解析去水印的工具,把无水印的视频发给他了,发过去之后我就开始思索,这个东西我自己能不能搞一个玩玩。

分析

作为一个前端开发,我对这个就很感兴趣,在一番搜索查阅之后,我发现好像挺简单的。

首先拿到抖音分享的视频链接,这是一个短连接,输入到浏览器地址栏

image.png

访问这个地址后就能拿到长链接,红框里的就是这个视频的对应id

image.png

拿到id之后再掉这个接口,item_ids = 刚刚拿到的这个id

https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=${videoId};

访问这个地址你就能拿到一个JSON字符串,这里建议解开后看,会更明白

image.png

JSON解析后如下图

image.png

其中item_list的第一条(其实总共也只有一条)中的video对应的就是视频信息,music对应的是背景音乐信息,share_info对应份分享的信息。

如图,video下的play_addr就是视频播放地址信息,其中的url_list的第一条就是有水印的视频地址,只需要将地址中的playwm改为play就可以得到无水印的视频信息,wm是水印watermark的意思,这就能取得无水印的视频地址了,所以只需要用代码把这几个步骤给实现就可以了。

image.png

代码

我这里比较懒,先将视频的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)

效果

运行结果如下: image.png

打开音频地址

image.png

打开视频地址

image.png