美文网首页Java编程社区鲁班小技巧
10行代码,帮你去掉抖音水印

10行代码,帮你去掉抖音水印

作者: yuandatou | 来源:发表于2019-05-03 18:12 被阅读125次

    叨叨几句

    抖音截止一九年初。日活达到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(); 
        }
    

    郑重申明:此文仅用于学习交流使用,请勿用做商业用途。
    关注公众号哦

    相关文章

      网友评论

        本文标题:10行代码,帮你去掉抖音水印

        本文链接:https://www.haomeiwen.com/subject/ankonqtx.html