抖音小视频去水印 PHP实战

1,682 阅读2分钟

我们都知道,抖音视频都有水印,我们要想无水印的视频,咋办?  目前市面上所有的去水印大多都是爬数据,然后分析,并不是直接拿到视频, 对视频做处理的。今天我们用PHP来实现 抖音去水印的功能.

  废话少说, 直接撸啊撸代码:


返回的数据拼接格式: 

{
    "success": true,
    "msg": "获取视频信息成功",
    "data": {
        "mp3": null,
        "nickname": "杭州美女榜",
        "desc": "听说这个小姐姐是个有5000w粉丝的大网红,有认识的吗?#街拍 #穿搭",
        "duration": "听说这个小姐姐是个有5000w粉丝的大网红,有认识的吗?#街拍 #穿搭",
        "videoUrl": "http://v6-dy.ixigua.com/42ba8f28dafc4dfd550af8b1d4bd8395/5ef58237/video/tos/cn/tos-cn-ve-15/2d4c19b7457443b2bb9c35660ffe9ac6/?a=1128&br=4974&bt=1658&cr=0&cs=0&dr=0&ds=6&er=&l=2020062612055201000806203713BFC627&lr=&mime_type=video_mp4&qs=0&rc=aml5ZWg0Zzg4cTMzZWkzM0ApZTk5OWZkOWVnNztnMzkzO2dxZF9sMHBxNF9fLS1iLS9zczZgLzMxYjYxLTM1LjItMTI6Yw%3D%3D&vl=&vr="
    }
}


 返回的URL: 

http://v6-dy.ixigua.com/42ba8f28dafc4dfd550af8b1d4bd8395/5ef58237/video/tos/cn/tos-cn-ve-15/2d4c19b7457443b2bb9c35660ffe9ac6/?a=1128&br=4974&bt=1658&cr=0&cs=0&dr=0&ds=6&er=&l=2020062612055201000806203713BFC627&lr=&mime_type=video_mp4&qs=0&rc=aml5ZWg0Zzg4cTMzZWkzM0ApZTk5OWZkOWVnNztnMzkzO2dxZF9sMHBxNF9fLS1iLS9zczZgLzMxYjYxLTM1LjItMTI6Yw%3D%3D&vl=&vr= 

 这就是无水印的。


附带完整代码:

<?php

$url = "https://v.douyin.com/J89wRHx/";
//$url = $_GET['url'];
if (empty($url)) {
    echo json_encode([
        "success" => false,
        "msg" => "请输入URL",
        "url" => ""
    ], JSON_UNESCAPED_UNICODE);
    exit;
}

[$success, $result] = httpGet($url);
if (!$success) {
    echo json_encode([
        "success" => false,
        "msg" => "获取视频信息异常",
        "url" => ""
    ], JSON_UNESCAPED_UNICODE);
    exit;
}
$itemId = pathinfo(pathinfo($result)['dirname'])['basename'];
$url = "https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=$itemId";

[$success, $res] = httpGet($url, 0);
if (!$success) {
    echo json_encode([
        "success" => false,
        "msg" => "获取视频信息失败",
        "url" => ""
    ], JSON_UNESCAPED_UNICODE);
    exit;
}
$arr = json_decode($res, true);
$playUrl = str_replace("playwm", "play", $arr['item_list'][0]["video"]["play_addr"]["url_list"][0]);


[$success, $videoUrl] = httpGet($playUrl);
if (!$success) {
    echo json_encode([
        "success" => false,
        "msg" => "获取视频信息异常",
        "url" => ""
    ], JSON_UNESCAPED_UNICODE);
    exit;
}

echo json_encode([
    "success" => true,
    "msg" => "获取视频信息成功",
    "data" =>
        [
            "mp3" => $arr['item_list'][0]["music"]['play_url'][0],
            "nickname" => $arr['item_list'][0]['author']['nickname'],
            "desc" => $arr['item_list'][0]['desc'],
            "duration" => $arr['item_list'][0]['desc'],
            "videoUrl" => $videoUrl,
        ]
], JSON_UNESCAPED_UNICODE);
exit;


function httpGet($url, $type = 1)
{
    $Header = array("User-Agent:Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1");
    $con = curl_init((string)$url);
    curl_setopt($con, CURLOPT_HEADER, False);
    curl_setopt($con, CURLOPT_SSL_VERIFYPEER, False);
    curl_setopt($con, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($con, CURLOPT_HTTPHEADER, $Header);
    curl_setopt($con, CURLOPT_TIMEOUT, 5000);
    $result = curl_exec($con);

    if (empty($result)) {
        return [false, "获取视频失败,请稍后重试"];
    }
    if ($result && $type == 1) {
        if (preg_match('/href="(.*?)">Found/', $result, $matches)) {
            return [true, str_replace("&amp;", "&", $matches[1])];
        }
        return [false, "获取视频失败"];
    }
    return [true, $result];
}