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("-----抖音去水印鏈接-----\n"+matchUrl);
        System.out.println("\n-----視頻保存路徑-----\n"+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;
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM