叨叨几句
抖音截止一九年初。日活达到2.5亿。月活达到5亿。我知道很多人觉得玩抖音是玩物丧志。但是真正玩的好的。不仅没有丧志,而且还实现了'一个亿的小目标'。
步入正题
说到去水印。大家首先可能想到的是用什么算法,什么图像识别,但不好意思。这些都不需要。思路很简单,我们直接从抖音上下载视频用的是有水印的链接,那我们就找到无水印的链接,然后下载的视频不就是无水印的视频吗?
实现步骤
1.首先我们打开抖音app,选择一个视频,点击分享,然后选择复制链接。这时候我们会拿到如下内容"#在抖音,记录美好生活#大家觉得,画的像不像?@杨幂 http://v.douyin.com/6BXQAT/ 复制此链接,打开【抖音短视频】,直接观看视频!"。
2.复制链接,在浏览器中打开,如下图。
3.打开开发者工具。仔细看下代码。我们会找到视频文件路径。如上图圈出位置。
4.复制该路径,在浏览器打开。如下图,但此时视频是有水印的。
5.下面就是见证奇迹的时刻了。我们将视频链接中的“playwm”替换成“play”。然后再去访问。就可以获取无水印的视频了。
代码详情
public static void removeWaterMark() {
//1.获取抖音分享链接
String url = "http://v.douyin.com/6BXQAT/";
//2.利用Jsoup请求指定url,得到网页html。
String htmls = Jsoup.connect(url).ignoreContentType(true).execute().body();
//3.利用正则匹配抖音视频链接
Pattern patternCompile = Pattern.compile("(?<=playAddr: \")https?://.+(?=\",)");
//4.匹配后封装成Matcher对象
Matcher matcher = patternCompile.matcher(htmls);
//5.利用Matcher中的group方法获取匹配的字符串,并将其替换。
String matchUrl ="";
while(matcher.find()) {
matchUrl = matcher.group(0).replaceAll("playwm", "play");
}
//6.将链接封装成流
//注:由于抖音对请求头有限制,只能设置一个伪装手机浏览器请求头才可实现去水印下载
Map<String, String> headers = new HashMap<>();
headers.put("Connection", "keep-alive");
headers.put("Host", "aweme.snssdk.com");
headers.put("User-Agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 12_1_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/16D57 Version/12.0 Safari/604.1");
//7.利用Joup获取视频对象,并封装成一个输入流对象
BufferedInputStream in = Jsoup.connect(matchUrl).headers(headers).timeout(10000).ignoreContentType(true).execute().bodyStream();
//8.保存文件到指定位置
File file= new File("d:/douyin.mp4");
File fileParent = file.getParentFile();
if(!fileParent.exists()){
fileParent.mkdirs();
}
OutputStream out =
new BufferedOutputStream(
new FileOutputStream(file));
int b ;
while((b = in.read()) != -1) {
out.write(b);
}
out.close();
in.close();
}
郑重申明:此文仅用于学习交流使用,请勿用做商业用途。
关注公众号哦
网友评论