手写一个抖音视频去水印工具,千万别刚一个程序员

本文讲述了作者如何为女友手写一个抖音视频去水印工具的过程,通过分析抖音视频链接,发现了去水印的原理,并提供了简单的实现步骤。作者通过后端解析重定向URL获取无水印视频地址,实现了功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有天晚上她在抖音看见一个非常具有 教育意义 的视频,“男人疼媳妇就该承包全部家务活”,然后它就想把视频下载下来,分享到她的姐妹群交流 驭夫 心得。

可是大家都知道抖音下载的视频是带水印,作为一个重度强迫症选手这是不被允许的,没办法那就找找有没有去水印工具吧,找了一圈要不就是收费,要么下载不下来,主上脸上的笑容也在逐渐消失。

我在边上调侃了一句:也没多难,要不我给你做一个!“你行吗?” 然后投来了一个不屑的眼神。

敢说我不行?

哎呀!本来就开个玩笑,居然说我不行,这就不能忍了,我得证明给你看看!男人嘛,就受不了这话

(建议用谷歌浏览器),工具线上预览效果:http://47.93.6.5:8888/index

去水印使用预览

下边和大家一起分析下做这个去水印工具的思路,很多人乍一听 去水印 ,下意识的觉得是一种什么牛比的算法,其实这是一种假象~

刨根问底


虽说要争口气,可刚开始做的时候我也真是一脸懵逼,因为根本不知道该从哪入手,去水印什么原理啊?难不成我还要写个算法?

找了一个抖音视频的分享链接,一点点分析,不难发现这是个经过处理的短链接,那这个短链接一定会重定向到真实的视频地址 URL

https://v.douyin.com/JSkuhE4/

浏览器中输入短链接得到了下边这个 URL ,以我的经验判断URL中的 6820792802394262795 很有可能是视频的唯一ID,而唯一ID通常用来作为获取详情接口的入参,哎嘿~ 好像有点头绪了。

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

有水印的链接

赶紧祭出 F12 大法打开控制台,在众多请求中发现这么一个接口,它居然用到了上边的唯一ID。

https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=6820792802394262795

更惊喜的是接口返回的数据那叫一个详细,作者信息、音频地址、视频地址、平面图都有。但唯独没有无水印的视频 URL只找到一个有水印的视频 URL,有点小失落,我又看了看这个地址,发现 wm 和我项目名有点像啊,不就是watermark 水印的缩写吗?

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

好像又看到了一丝希望,我赶紧修改URL在浏览器中又试了一下,果然真的没水印了。

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

到这才发现抖音去水印 简单的让人感动,哈哈哈~

身体力行


既然原理都清晰了,剩下的就是一步一步实现功能了,原理看着挺简单的,但实现中还是遇到一点点小坑,浪费了不少时间。

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

  • 1、从输入框中过滤取出视频短连接

  • 2、短连接传到后端解析出无水印的视频 URL

  • 3、视频 URL传递给前端预览、下载

后端并没有什么难度,一步一步按照上边分析的流程解析真实视频 URL 就可以了。

注意 :我们想得到的地址URL,都是当前短连接URL 经过重定向后的URL。而抖音有些链接是不支持浏览器访问的,所以要手动修改 User-agent 属性模拟移动端访问才可以。

/**

* @param url

* @author xiaofu

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

* @date 2020/9/15 12:43

*/

public static String getLocation(String url) {

try {

URL serverUrl = new URL(url);

HttpURLConnection conn = (HttpURLConnection) serverUrl.openConnection();

conn.setRequestMethod(“GET”);

conn.setInstanceFollowRedirects(false);

conn.setRequestProperty(“User-agent”, “ua”);//模拟手机连接

conn.connect();

String location = conn.getHeaderField(“Location”);

return location;

} catch (Exception e) {

e.printStackTrace();

}

return “”;

}

下边是完整的后端实现,可以看到代码量非常的少。

/**

* @author xiaofu-公众号:程序员内点事

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

* @date 2020/9/15 18:44

*/

@Slf4j

@Controller

public class DYController {

public static String DOU_YIN_BASE_URL = “https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=”;

/**

* @param url

* @author xiaofu

* @description 解析抖音无水印视频

* @date 2020/9/15 12:43

*/

@RequestMapping(“/parseVideoUrl”)

@ResponseBody

public String parseVideoUrl(@RequestBody String url) throws Exception {

DYDto dyDto = new DYDto();

try {

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

/**

* 1、短连接重定向后的 URL

*/

String redirectUrl = CommonUtils.getLocation(url);

/**

* 2、拿到视频对应的 ItemId

*/

String videoUrl = “”;

String musicUrl = “”;

String videoPic = “”;

String desc = “”;

if (!StringUtils.isEmpty(redirectUrl)) {

/**

* 3、用 ItemId 拿视频的详细信息,包括无水印视频url

*/

String itemId = CommonUtils.matchNo(redirectUrl);

StringBuilder sb = new StringBuilder();

sb.append(DOU_YIN_BASE_URL).append(itemId);

String videoResult = CommonUtils.httpGet(sb.toString());

DYResult dyResult = JSON.parseObject(videoResult, DYResult.class);

/**

* 4、无水印视频 url

*/

videoUrl = dyResult.getItem_list().get(0)

.getVideo().getPlay_addr().getUrl_list().get(0)

.replace(“playwm”, “play”);

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

光给面试题不给答案不是我的风格。这里面的面试题也只是凤毛麟角,还有答案的话会极大的增加文章的篇幅,减少文章的可读性

Java面试宝典2021版

最常见Java面试题解析(2021最新版)

2021企业Java面试题精选

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
.(img-AkwbatLH-1712926810570)]

最常见Java面试题解析(2021最新版)

[外链图片转存中…(img-I9uUL1fO-1712926810570)]

[外链图片转存中…(img-x8m54zOc-1712926810570)]

2021企业Java面试题精选

[外链图片转存中…(img-ekhh7D21-1712926810570)]

[外链图片转存中…(img-GD5k9LC9-1712926810570)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值