抖音短视频的无水印下载,可能会帮助到需要视频素材的小伙伴。这里使用PHP完成无水印解析,源码仅供参考
前言
首先,我们应当先了解一下无水印解析的前提条件。这里,我们不考虑其他大佬二次开发的接口,从官方的角度,来实现无水印解析。当然,在这之前,可能众多大佬均都了解并且发表了相关思路。因此,此文章仅仅表示博主的思路进行解读。
话不多说,源码先奉上。
源码
<?php
function douyin($url){
//设置移动端请求头
$hdrs = array(
'http' =>array('header' => "User-Agent: Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Mobile Safari/537.36\r\n"),
);
//设置请求头
$context = stream_context_create($hdrs);
//请求获取数据
$lines=file($url);
//获取响应的302链接,处理mid
$id=$http_response_header[6];
//匹配url中的数字,获取mid真实值
$mid=preg_match('|(\d+)|',$id,$id_result);
//请求抖音官方接口 依据mid值
$json_id=file_get_contents("https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=".$id_result[0]);
//将请求的数据array化
$arr_id = json_decode(mb_substr(mb_substr($json_id, strpos($json_id, '{')), 0, -1), true);
//获取文字标题以及真实视频链接
$name=$arr_id['item_list'][0]['author']['nickname'];
$url_video=$arr_id['item_list'][0]['video']['play_addr']['url_list'];
//取代获取真实无水印接口
$url_video=str_replace("playwm","play",$url_video[0]);
//移动模拟访问获取真实链接
file_get_contents($url_video,0,$context);
$url_video=$http_response_header[9];
//进一步获取数据后,消除不需要的前缀
$url_video=str_replace("location: ","",$url_video);
//输出url数据
//print(#url_video);
//json格式输出
$json_con=array('msg'=>'success','url'=>$url_video,'author'=>'https://github.com/blueweiwei');
$json_con=json_encode($json_con,JSON_UNESCAPED_SLASHES);
print($json_con);
}
//get请求内容,正着表达式处理,仿制
$a=preg_match('/(http|https):\/\/v.douyin.com\/+[a-zA-Z0-9]+\//i',$_GET['url'],$result);
// print_r($result) ;
if($a){
douyin($result[0]);
}else{
print('输入链接有误!');
}
讲解思路
对于程序实现过程,简单进行阐述
使用方法
此PHP程序采用get方式来传递参数,对于传递来的链接,进行正则表达式匹配。避免处理链接出现error
处理视频链接
接下来的操作,都是源于一个神秘的url
https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=
而想要获取到item_ids的值,需要在获取的分享链接302的中转url中。在PHP中,采用 $http_response_header 来获取302的链接。
将item_ids的链接补全访问,或发现获得了一个json格式的文件,这个文件正是该视频的详细信息。

在图片的json文件中, play_addr 的 url_list 正是视频播放的源地址。
就等待我们获取到抖音原视频的地址时,我们就可以采用将参数 playwm => play 的形式,获取到无水印的源视频。
//有水印视频源地址
https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0300fc30000bkc46gm0gekipjvdld8g&ratio=720p&line=0
//无水印视频源地址
https://aweme.snssdk.com/aweme/v1/play/?video_id=v0300fc30000bkc46gm0gekipjvdld8g&ratio=720p&line=0
到这里,对于找到的无水印视频地址,在PC端是空白页,只有当在移动端设备访问时,才可以出现真正的视频资源,进一步进行下载。因此,我们在PHP源码中使用了 stream_context_create 来设置 User-Agent 。
这样,我们就能得到真实的无水印地址了!
具体的操作实现,还需要进行一步一步的尝试。
结尾
对于视频的无水印解析,网络上有很多大牛的解析接口。尝试大佬们的接口,会很方便、很轻松的完成。然而,处于学习的目的,我们要知其然,知其所以然。简单的描述一下实现的过程,有利于初学者,更有利于自身的技能提高。
