• 如何下载无水印的抖音视频?


    各大短视频平台的做法几乎都是一样,有两个接口或两类型播放视频地址,就是无水印、带水印的视频,我们的目的很清楚,就是分析平台的页面源码,找出没有带水印的视频地址,然后下载保存下来,就这么直接,下面说说我是如何拿到无水印的视频地址的。

    1、复制抖音“分享链接”。
    随便打开一个抖音视频,例如:

    在这里插入图片描述

    2、将复制的地址在浏览器(我用的是谷歌)打开,你会看到一个重定向跳转地址。

    在这里插入图片描述

    3、按F12打开调试窗口,切换到“NETWORK”=》“Preview”标签栏,按F5刷新页面,点击我框框的这个地址。


    在这里插入图片描述

    4、展开请求的响应数据(json格式的),找到url_list节点,这个就是视频地址。

    在这里插入图片描述

    5、复制视频地址,然后将playwm修改为play,其他不变。

    为什么要改为play呢?怎么知道的呢?这个大家可以复制抖音创作者的链接按照统一的方法,可以看到作品列表的地址,里面就是没有水印的地址,这里就不展开详细操作步骤了。
    在这里插入图片描述

    6、将修改后的地址再次打开,这个视频就是没有水印的视频,可以鼠标保存到本地。

    注意,这样同样也做了一次重定向跳转,重定向地址才是最终的无水印视频地址。
    在这里插入图片描述

    整个流程就完了。

    这样在PC上通过手工方式分析获取的视频,如果直接在手机上操作就做不到了。那么,程序上如何实现自动化获取并且保存呢?我想是程序员都应该知道这么实现,下面说说我的实现(简要代码C#):

    1、输入分享链接,获取重定向地址。

     1 /// <summary>
     2 /// 获取重定向URL
     3 /// </summary>
     4 /// <returns></returns>
     5 private string GetRedirectUrl(string url)
     6 {
     7     HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
     8     myRequest.UserAgent = UserAgent;
     9     myRequest.Referer = referer;
    10     myRequest.AllowAutoRedirect = false;
    11     HttpWebResponse myResponse = null;
    12 
    13     try
    14     {
    15         myResponse = (HttpWebResponse)myRequest.GetResponse();
    16     }
    17     catch (WebException ex)
    18     {
    19         if (ex.Message.Contains("302"))
    20         {
    21             myResponse = (HttpWebResponse)ex.Response;
    22         }
    23     }
    24 
    25     if (myResponse == null)
    26     {
    27         return null;
    28     }
    29 
    30     var redirectUrl = string.Empty;
    31     if (myResponse.Headers["Location"] != null)
    32     {
    33         redirectUrl = myResponse.Headers["Location"];
    34     }
    35 
    36     return redirectUrl;
    37 }

    2、从页面提取视频ID。

     1 /// <summary>
     2 /// 获取无水印视频路径
     3 /// </summary>
     4 /// <returns></returns>
     5 public override Result GetResult()
     6 {
     7     if (!Uri.IsWellFormedUriString(this.Url, UriKind.Absolute)) return new Result("参数有误");
     8     var redirectUrl = GetRedirectUrl(Url);
     9     if (string.IsNullOrWhiteSpace(redirectUrl)) return new Result("地址有误");
    10     Regex regex = new Regex("share/video/(?<ItemID>.+?)/", RegexOptions.IgnoreCase);
    11 
    12     if (regex.IsMatch(redirectUrl))
    13     {
    14         var itemId = regex.Match(redirectUrl).Groups["ItemID"].Value;
    15         var itemUrl = $"https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids={itemId}";
    16 
    17         WebClient client = new WebClient();
    18         client.Headers[HttpRequestHeader.UserAgent] = UserAgent;
    19         client.Headers[HttpRequestHeader.Referer] = referer;
    20 
    21         var content = client.DownloadString(itemUrl);
    22         var json = (JObject)JsonConvert.DeserializeObject(content);
    23         var status = json["status_code"].Value<int>();
    24         if (status != 0)
    25         {
    26             return new Result("获取数据失败");
    27         }
    28         else
    29         {
    30             var videoUrl = json.SelectToken("item_list[0].video.play_addr.url_list[0]");
    31             if (videoUrl != null && !string.IsNullOrWhiteSpace((string)videoUrl))
    32             {
    33                 var playUrl = ((string)videoUrl).Replace("playwm", "play");
    34 
    35                 Result result = new Result();
    36                 result.Success = true;
    37                 result.Message = "解析成功";
    38                 result.Data = $"{GetRedirectUrl(playUrl)}";
    39                 var resultUrl = GetRedirectUrl(playUrl);
    40                 resultUrl = resultUrl.Replace("http:", "https:");
    41                 result.Data = $"{resultUrl}";
    42 
    43                 return result;
    44             }
    45         }
    46     }
    47 
    48     return new Result("解析失败");
    49 }

    3、下载播放视频的页面内容(JSON)。

    1 var itemId = regex.Match(redirectUrl).Groups["ItemID"].Value;
    2 var itemUrl = $"https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids={itemId}";
    3 
    4 WebClient client = new WebClient();
    5 client.Headers[HttpRequestHeader.UserAgent] = UserAgent;
    6 client.Headers[HttpRequestHeader.Referer] = referer;
    7 
    8 var content = client.DownloadString(itemUrl);

    4、分析提取视频播放链接,将有水印的地址转为无水印的地址。

    1 var videoUrl = json.SelectToken("item_list[0].video.play_addr.url_list[0]");
    2 if (videoUrl != null && !string.IsNullOrWhiteSpace((string)videoUrl))
    3 {
    4     var playUrl = ((string)videoUrl).Replace("playwm", "play");
    5 }

    5、程序实现保存视频文件。

    我这里是在小程序里面实现的,用到小程序的API函数:wx.saveVideoToPhotosAlbum,代码我就不贴了。

    大家不一定用微信小程序实现客户端下载,因为小程序有很多限制,很不方便,可以自己写APP实现,这样下载就规避很多限制(主要是域名)。

    如果大家有兴趣学习研究的可以联系我,或者搜索小程序“短视频去水印解析器工具”查看效果。

    多写原创文章,多分享,帮助他人,快乐自己。 欢迎编程界的朋友,一起学习,一起交流。 关注公众号“程序员之事”获取更多资源。
  • 相关阅读:
    C# 设计模式-桥接模式
    C# 设计模式-外观模式
    C# 设计模式-代理模式
    楼层导航奇葩问题解决
    楼层导航和回顶部
    回顾
    禁止右击选中
    安装客服在线系统
    csdn 分享私藏的18个黑科技网站,想找什么软件就找什么软件!!!
    eyoucms 模板
  • 原文地址:https://www.cnblogs.com/RCJL/p/15407585.html
Copyright © 2020-2023  润新知