当前位置: 首页 > 图灵资讯 > 技术篇> 用java手写一个抖音视频去水印工具

用java手写一个抖音视频去水印工具

来源:图灵教育
时间:2023-02-21 10:34:45

  说说我为什么要做一个抖音视频水印工具,其实是因为我的沙雕女友。

  一天晚上,她在抖音上看到了一段非常有教育意义的视频,如果一个男人爱他的儿媳,他应该承包所有的家务。然后它想下载这段视频,并与她的姐妹们分享她的经验。

  然而,我们都知道抖音下载的视频有水印。作为一名严重的强迫症运动员,这是不允许的。如果没有办法,那就找到是否有水印工具要么收费,要么不能下载,主脸上的微笑也在逐渐消失。

  我在旁边开玩笑说:没那么难。我为什么不给你做一个呢!你能吗?然后他不屑地看了看。

  哦!我开玩笑说我做不到。我受不了。我得证明给你看!男人受不了。

  让我们分析一下制作这种水印工具的想法。乍一看,很多人下意识地认为这是一种牛比算法。事实上,这是一种错觉~。

  刨根问底

  虽然我想争取语气,但当我第一次这样做的时候,我真的很困惑,因为我不知道从哪里开始,水印的原理是什么?我必须写一个算法吗?

  找到一个tiktok视频共享链接析,不难发现这是一个处理过的短链接,然后这个短链接将重新定向真实的视频地址URL。

  https:/v.douyin.com/JSkuhe4//

  浏览器中的输入短链接得到了以下URL。根据我的经验,URL中的6820792802394262795很可能是视频中唯一的ID,而唯一的ID通常用作获取详情接口的参考。嘿~好像有点线索。

  https:/www.iesdouyin.com/share/video/682079282802394262795

  快速牺牲F12法打开控制台,在众多请求中发现这样一个接口,其实是上面唯一的ID。

  https:/www.iesdouyin.com/web/api/v2/awem/iteminfo/item_ids=6820792802394262795。

  更令人惊讶的是,接口返回的数据被称为详细信息、作者信息、音频地址、视频地址和平面图。但是没有无水印的视频URL。

  只找到一个有水印的视频URL,有点失落。我又看了看这个地址,发现wm有点像我的项目名。这不是watermark水印的缩写吗?

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

  似乎又看到了一丝希望,我迅速修改URL,在浏览器中再试一次,果然真的没有水印。

  https://aweme.snssdk.com/aweme/v1/play/video_id=v0200f03000bq54kg2saj3lso3oh20&ratio=720p&line=0。

  这时才发现抖音去水印简单感人,哈哈哈~。

  身体力行

  既然原理很清楚,剩下的就是一步一步实现功能。原理看起来很简单,但在实现过程中仍然会遇到一个小坑,浪费了很多时间。

  实现过程只有三个简单的步骤:

  1.从输入框中过滤取出视频短连接。

  2.短连接传输到后端,分析无水印的视频URL。

  3.将视频URL传输到前端预览.下载。

  后端并不难,按照上述分析流程一步一步分析真实视频URL就可以了。

  注:我们想要的地址URL是目前重定向后的URL。一些抖音链接不支持浏览器访问,因此需要手动修改USER-agent属性模拟移动终端访问。

  /**

  *@paramurl。

  *@authorxiaofu。

  *@description获取当前链接重定向后的url。

  *@date2020/9/1512:43。

  */

  publicsticstingelocation(stringurl){

  try{

  URLserverurl=newURL(URL);

  Httpurlconectionn=(Httpurlconection)serverurl.openconection();

  con.setrequestmethod(GET);

  con.setinstancefollowredirects;

  con.setrequestproperty(“user-agent”,“ua”);//模拟手机连接。

  con.connect();

  Stringlocation=con.getheaderfield(Location);

  returnlocation;

  }catch(Exceptione){

  e.printstacktrace();

  }

  “return”;

  }

  下面是完整的后端实现,可以看到代码量很小。

  /**

  *@authorxiaofu-微信官方账号:程序员点东西。

  *@description抖音无水印视频下载。

  *@date2020/9/1518:44。

  */

  @Slf4j。

  @controller。

  publiclasdontrole

  publicstaticstringdou_yin_base_url=“https://www.iesdouyin.com/web/api/v2/aweminfo/itemuids=”;

  /**

  *@paramurl。

  *@authorxiaofu。

  *@description分析抖音无水印视频。

  *@date2020/9/1512:43。

  */

  @Requestmapping(“/parsevideourl”)

  @ResponseBody。

  publicstringparsevideourl(@requestbodystringurl)throwsexception

  DyDtodyDto=newdyDto();

  try{

  url=urldecoder.decode(url).replace(“url=,“”);

  /**

  *1.重定向后的URL短连接。

  */

  Stringredirecturl=commonutils.getlocation(url);

  /**

  *2.获取视频对应的Itemid。