我们都知道,抖音视频都有水印,我们要想无水印的视频,咋办? 目前市面上所有的去水印大多都是爬数据,然后分析,并不是直接拿到视频, 对视频做处理的。今天我们用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("&", "&", $matches[1])];
}
return [false, "获取视频失败"];
}
return [true, $result];
}