zoukankan      html  css  js  c++  java
  • JAVA代码实现抖音短视频去水印功能

    今天有人找我帮他抖音视频去水印,发到朋友圈,然后就研究了一下。去水印功能代码如下:
    public class DouYinQushuiyin {
    
        public static void main(String[] args) throws Exception{
    
            //●抖音链接(使用手机分享功能,复制链接)
            String url = "http://v.douyin.com/2MKBC6/";
    
            String url1 ="#在抖音,记录美好生活#好好看 http://v.douyin.com/6xrJQP/ 复制此链接,打开【抖音短视频】,直接观看视频!";
    
    
            //过滤链接,获取http连接地址
            String finalUrl = decodeHttpUrl(url1);
    
            //1.利用Jsoup抓取抖音链接
            //抓取抖音网页
            String htmls = Jsoup.connect(finalUrl).ignoreContentType(true).execute().body();
            //System.out.println(htmls); //做测试时使用
    
            //2.利用正则匹配可以抖音下载链接
            //playAddr: "https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0200ffc0000bfil6o4mavffbmroeo80&line=0",
            //具体匹配内容格式:「https://aweme.snssdk.com/aweme/...line=0
            Pattern patternCompile = Pattern.compile("(?<=playAddr: ")https?://.+(?=",)");
            //利用Pattern.compile("正则条件").matcher("匹配的字符串对象")方法可以将需要匹配的字段进行匹配封装 返回一个封装了匹配的字符串Matcher对象
    
            //3.匹配后封装成Matcher对象
            Matcher m = patternCompile.matcher(htmls);
    
            //4.①利用Matcher中的group方法获取匹配的特定字符串 ②利用String的replace方法替换特定字符,得到抖音的去水印链接
            String matchUrl ="";
            while(m.find()) {
                matchUrl = m.group(0).replaceAll("playwm", "play");
            }
    
            //5.将链接封装成流
            //注:由于抖音对请求头有限制,只能设置一个伪装手机浏览器请求头才可实现去水印下载
            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");
    
            //6.利用Joup获取视频对象,并作封装成一个输入流对象
            BufferedInputStream in = Jsoup.connect(matchUrl).headers(headers).timeout(10000).ignoreContentType(true).execute().bodyStream();
    
            Long timetmp = new Date().getTime();
            String fileAddress = "d:/抖音视频/douyin_"+timetmp+".mp4";
    
            //7.封装一个保存文件的路径对象
            File fileSavePath = new File(fileAddress);
    
            //注:如果保存文件夹不存在,那么则创建该文件夹
            File fileParent = fileSavePath.getParentFile();
            if(!fileParent.exists()){
                fileParent.mkdirs();
            }
    
            //8.新建一个输出流对象
            OutputStream out =
                    new BufferedOutputStream(
                            new FileOutputStream(fileSavePath));
    
            //9.遍历输出文件
            int b ;
            while((b = in.read()) != -1) {
                out.write(b);
            }
    
            out.close();//关闭输出流
            in.close(); //关闭输入流
    
            //注:打印获取的链接
            System.out.println("-----抖音去水印链接-----
    "+matchUrl);
            System.out.println("
    -----视频保存路径-----
    "+fileSavePath.getAbsolutePath());
        }
    
        public static String decodeHttpUrl(String url) {
            int start = url.indexOf("http");
            int end = url.lastIndexOf("/");
            String decodeurl = url.substring(start, end);
            return decodeurl;
        }
    }
  • 相关阅读:
    【全栈修炼】OAuth2 修炼宝典
    【JS】395-重温基础:事件
    【JS】394- 简明 JavaScript 函数式编程-入门篇
    【每周小回顾】11- 一起回顾上周精彩内容
    玩转spring MVC(七)----拦截器
    玩转spring mvc(六)---自定义异常跳转页面
    玩转Spring MVC(五)----在spring中整合log4j
    2. 网友对app后端写作系列文章的写作建议
    玩转spring mvc(四)---在spring MVC中整合JPA
    玩转Spring MVC(三)----spring基本配置文件
  • 原文地址:https://www.cnblogs.com/tuanz/p/11306928.html
Copyright © 2011-2022 走看看