抖音无水印视频下载

约 3 分钟您可以阅读完本篇文章 🕰️

👯 前言

预备,开火,瞄准······ —— 无名氏

本文的目标是提供思路,从实用的观点来看,这将提供一个成本相对较低的解决方案。同时我也会长时间提供可运行的无水印视频下载开源代码

🔭 预期

处理前

处理后

💻 正文

  • 方法一:使用去水印平台

    这些网站是针对短视频平台的,但需要付费解析的,可以考虑使用 Splinter。 将浏览器设置为无头浏览器 ,直接模拟请求解析,可以白嫖。

  • 方法二:直接修改下载链接

  public function main() {
      // 视频播放地址, 通过抖音分享链接获取
      $url = 'https://v.douyin.com/JKgS4Vp/'
      $url = $this->getCurl($url);

      preg_match('/video\/([0-9]+)\//i', $url, $matches);

      $result = $this->video_url($matches[1]);
      return $result;
  }
  
    /**
    * 获取抖音接口视频信息
    */
    private function video_url($dyid)
    {
        $getApi = 'https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=' . $dyid;
        $data = $this->getCurl($getApi);
        $json = json_decode($data, true);
        //视频描述
        $playUrl = null;
        foreach ($json['item_list'] as $k => $v) {
            //无水印URL
            $playUrl = $list['play_url'] = $this->Url($v['video']['play_addr']['url_list']);
        }
        return [
           'play_url' => urldecode($playUrl),
        ];
    }
  
  /**
  * 修改下载链接
  */
  public function Url($list) {
    return $list[0].replace('playwm','play')
  }
  
  /**
  * 发起请求
  */
  public function getCurl($url, $options = [], $foll = 0)
  {
      //初始化
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $url); //访问的url
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //完全静默
      curl_setopt($ch, CURLOPT_HEADER, false);
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //忽略https
      curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //忽略https
      curl_setopt($ch, CURLOPT_HTTPHEADER, array_merge([self::getRandomUserAgent()], $options)); //UA
      curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $foll); //默认为$foll=0,大概意思就是对照模块网页访问的禁止301 302 跳转。
      $output = curl_exec($ch); //获取内容
      curl_close($ch); //关闭
      return $output; //返回
  }
复制代码
  • 方法三:设置视频播放地址的 Referer 与 Host
    public function main() {
        // 视频播放地址, 通过抖音分享链接获取
        $url = 'https://v.douyin.com/JKgS4Vp/'
        $url = $this->getCurl($url);

        preg_match('/video\/([0-9]+)\//i', $url, $matches);
        
        $result = $this->videoUrl($matches[1]);
        return $result;
    }
    
    /**
    * 获取抖音接口视频信息
    */
    private function videoUrl($dyid)
    {
        $getApi = 'https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=' . $dyid;
        $data = $this->getCurl($getApi);
        $json = json_decode($data, true);
        //视频描述
        $playUrl = null;
        foreach ($json['item_list'] as $k => $v) {
            //无水印URL
            $playUrl = $list['play_url'] = $this->Url($v['video']['play_addr']['uri']);
        }
        return [
           'play_url' => urldecode($playUrl),
        ];
    }

    /**
    * 获取重定向视频地址
    */
    public function Url($videoId)
    {
        $str = $this->getCurl("https://aweme.snssdk.com/aweme/v1/play/?video_id=" . $videoId . "&line=0", [
            'Referer' => "https://www.iesdouyin.com",
            'Host' => "www.iesdouyin.com",
        ], 0);
        preg_match('#<a href="(.*?)">#', $str, $data);
        $download_url = explode("//", $data[1]);
        return isset($download_url[1]) ? 'https://' . $download_url[1] : '解析失败';
    }
    
    /**
    * 发起请求
    */
    public function getCurl($url, $options = [], $foll = 0)
    {
        //初始化
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url); //访问的url
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //完全静默
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //忽略https
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //忽略https
        curl_setopt($ch, CURLOPT_HTTPHEADER, array_merge([self::getRandomUserAgent()], $options)); //UA
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $foll); //默认为$foll=0,大概意思就是对照模块网页访问的禁止301 302 跳转。
        $output = curl_exec($ch); //获取内容
        curl_close($ch); //关闭
        return $output; //返回
    }   
复制代码

🎉 总结

获取抖音无水印视频,打开抓包工具就能找到规律,但是这个方法一般会留到最后。目前我最常用的方法是先去 github 上检索关键词,学习同行的思路。github 中一般可以总结出 2 ~ 3 种方案,再根据自己的上下文,选择最合适的方案。

本人技术能力捉襟见肘,如果有写的不对的地方,请留言斧正,十分感谢 🙇

如果没有解决您的问题,首先十分抱歉耽误您的时间,可以在下方评论区留言,看到后我会第一时间回复🙍‍♂️