关于html5:短视频douyinkuaishou去水印-揍是这么简单

122次阅读

共计 3314 个字符,预计需要花费 9 分钟才能阅读完成。

当初视频号十分炽热,之前在做抖音和快手的人就间接把之前的视频间接搬运过去了。然而从抖音 app 下载的视频都是带官网水印的?这个是怎么去掉的?哦,不对,他们应该都有保留原视频的吧。然而还有很多人是间接搬运他人的视频的,那他们是怎么去水印的呢?

其实早就有很多现成的工具,如小程序、去水印 app 都能间接去水印,甚至还有免费的。

连忙钻研钻研,说不准咱也能搞一个比他们更好的工具进去。

一顿操作猛如虎,各种抓包看数据,后果简略的不得了,分分钟内就能给一坨视频去水印。

其实这些去水印的工具都太夸大(忽悠)了,齐全不是真的去水印,小白都认为是对视频做了什么牛逼的后处理,把水印干掉了。

其实是间接下载的无水印的视频而已。因为你在抖音和快手等 app 上,看到的视频都是不带官网水印,所以这个无水印视频必定是存在的。

上面就把自己破解的过程一一说下(以 douyin 为例)。

1. 先拿到第一个链接

2. 嗯,在浏览器关上这个链接

而后关上方才复制过去的地址,https://v.douyin.com/e1MMESR/。

3. 关上地址发现有 302 跳转

4. 而后播放左侧的视频,居然变成了带水印的视频。

咱们在 app 里播放的看不到水印的,然而在浏览器关上就是有水印的。

5. 在控制台发现有 ajax 申请,返回了该视频的全副信息,当然也包含视频地址

6. 找到视频播放地址 video.play_addr.url_list[0]

https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0300f760000c0fq7t5t1gvidv0rdtag&ratio=720p&line=0

下面这个地址和咱们在控制台审查元素看到的 video 播放的是一个地址,然而都是带水印的地址。

起码是一个信息,先把这个地址记录下来。

https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0300f760000c0fq7t5t1gvidv0rdtag&ratio=720p&line=0

7. 另寻他路,从集体核心的视频列表动手

拿到集体的视频列表地址(进入集体核心点击分享,有复制链接)https://v.douyin.com/e1MCMaT/。

8. 浏览器关上,从控制台剖析接口数据

这个就是接口返回的视频列表数据,不过也就是前几条,临时还没看怎么拿到全副。

9. 列表数据分析,发现新大陆

下面接口返回了视频列表数据,这里每条数据的信息更丰盛,而且发现了无水印地址。

每一个视频都有 4 个播放地址,预计是 cdn,用来分流的,其实这就是无水印的播放地址。

10. 进行搜寻,起点已到

下面的地址看上去内容差异挺大,顺次关上后发现前两个都间接播放,后两个都有 302 跳转后播放。

再看下第三条地址,如同有点面生

// 第三条地址
https://aweme.snssdk.com/aweme/v1/play/?video_id=v0300f760000c0fq7t5t1gvidv0rdtag&line=0&ratio=720p&media_type=4&vr_type=0&improve_bitrate=0&is_play_url=1&source=PackSourceEnum_DOUYIN_REFLOW

// 下面保留的
https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0300f760000c0fq7t5t1gvidv0rdtag&ratio=720p&line=0

很显著,地址一样简直截然不同,只是参数不同。

参数能够疏忽,就看地址差异在于 /playwm//play/,差了个wm

到这里,咱们算是功败垂成了,去掉 wm 的就是无水印播放地址。wm是个啥?就是水印的英文简写watermark

11. 下载就完了

间接关上播放,在播放的视频上右键保留,完事儿。

自己前面也做很多测试,以上路子 ok。

12. 快手的怎么搞?

快手的就更简略了,齐全没有暗藏,间接浏览器关上就是无水印的视频。显著抖音多做了一些。

搞个下载工具?

当初咱们两步就能够下载到无水印视频了,但都是手动下载。所以咱们要做成工具,间接输出视频地址就能够一键下载。

如何实现?手动下载很容易,但如果搞成主动的,就没那么顺利,因为平台早就意识到这个问题,也是做了进攻的了。

上面有两个计划,最终的指标都是拿到视频的播放地址,而后下载视频。

实现计划 A

走平台的 api 接口,拿到播放地址。不过很可能会遇到坑,平台应该早就对这种操作有计划,会被拒。

计划 B

这个应该更简略,更无效,应用无头浏览器来拿到视频的地址。

局部代码

代码还么有写残缺,只写了一个下视频和拿到 api 申请地址。

// 下载视频

const path = require('path')
const fs = require('fs')
const request = require('request')
/**
 * 下载视频
 */
function downVideo(url) {var fileName = `${+new Date()}.mp4`
  var fullPath = path.resolve('./videos/' + fileName);
  console.log('开始下载视频:', fileName);
  request(encodeURI(url)).on('error', function (err) {console.log(error)
  }).pipe(fs.createWriteStream(fullPath)).on('finish', () => {console.log('视频下载胜利');
  })

}

const url = 'http://v6-z.douyinvod.com/719423c89357069fffd503a6698436f9/60342b2c/video/tos/cn/tos-cn-ve-15/56505c3774bd46de98d6a49e2315e292/?a=1128&br=4996&bt=1249&cd=0%7C0%7C0&ch=0&cr=0&cs=0&cv=1&dr=0&ds=3&er=&l=2021022300074001020410813542130635&lr=&mime_type=video_mp4&pl=0&qs=0&rc=and1eWxqd3d0MzMzOWkzM0ApZTw2NWhoZGRpNzs7ZTc4OWcpaGRqbGRoaGRmXmEtYXMuMjRjYC0tNC0wc3MzLjY1XzMxNjE2Ly4xMDFhOmNwb2wrbStqdDo%3D&vl=&vr='
downVideo(url)
// 获取 api 地址

function getApiUrl(url){
  // 前端传过来的地址 进行重定向拿到 item_ids 并且返回
  return new Promise(resolve => {request(url, (error, response) => {if (!error && response.statusCode == 200) {
        let href = response.request.href;
        let id = '';
        id = href.match(/video\/(\S*)\/\?region/)[1];
        resolve(`https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=${id}`);
      } else {resolve(false)
      }
    })
  });
}

getApiUrl('xxx').then(api=>{//xxx})

前面会把代码补全,写一个残缺的 ” 去水印 ” 工具,挂到我本人的站上。

最初

整个过程没什么难度,不过挺好玩。而且发现了很多有意思的货色,就下面那个视频列表内的信息很多很多,还能够开掘一下。

市面上很多去水印工具,反对列表批量读取,这个怎么搞的,目前还没钻研,晓得的小伙伴能够留个言。

别看这件事儿对于程序员来说显得贼简略,然而不晓得的人更多,你懂得。

接下来我要去搬运视频啦!!!

即时获取更多原创文章,请关注公众号『前端技术江湖』

正文完
 0