# 抖音去水印_Csharp_web_小程序 **Repository Path**: caolaoban/Csharp.DouyinClear ## Basic Information - **Project Name**: 抖音去水印_Csharp_web_小程序 - **Description**: C#开源抖音去水印 - **Primary Language**: C# - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: https://hunji.xyz - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-07-18 - **Last Updated**: 2022-07-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DouyinClear #### 介绍 C#开源抖音去水印 ### 前言 找点事情干干,前几天用微信分享了一个动态视频,抖音下载的是有水印的,就找到在线的抖音去水印的网站。然后一气呵成设置成功。 思考为什么不自己做一个。 再网上面找了一大圈,什么php,go,java,py等等就是没看到C#的(c#这方面生态还是很少的),那就来做吧。当然对于大佬来说代码不值得一提,也想为C#圈贡献自己的一份力量. ## 分析 ![](https://img-blog.csdnimg.cn/20210430134609740.png) 欢迎关注我的微信公众号**Net分享** 1. 分析用户的视频链接(重定向获取视频的id) 2. 通过抖音官方接口获取播放链接带有水印,替换链接就搞定ok **本软件仅供学习交流,如作他用所承受的法律责任一概与作者无关(下载使用即代表你同意上述观点)** ## 核心代码 ``` try { var str = "3.51 LjC:/ 醒的真早呀美女 https://v.douyin.com/FYTHEm7/ 复制此链接,打开Dou音搜索,直接观看视频!"; // 正则获取 -- https://v.douyin.com/FY95k3u/ var videoid = "";//视频的id var url = Regex.Matches(str, @"(?http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?)").FirstOrDefault(); if (url is null) Console.WriteLine("未找到视频地址"); //https://v.douyin.com/FY95k3u/ 复制此链接 Regex reg = new Regex(@"[\u4e00-\u9fa5]"); var targetlink = reg.Replace(url.Value, ""); //去除中文 // 第一步获取视频的id using (var center = new HttpClient()) { var message = await center.GetAsync(targetlink); targetlink = message.RequestMessage.RequestUri.ToString(); videoid = Regex.Replace(targetlink, @"[^0-9]+", "");//视频的id } if (string.IsNullOrEmpty(videoid)) { throw new Exception("未找到视频地址"); } // 第二步 通过抖音接口获取播放地址 https://www.douyin.com/web/api/v2/aweme/iteminfo/?item_ids= var douyinurl = "https://www.douyin.com/web/api/v2/aweme/iteminfo/?item_ids=" + videoid; var retString = ""; using (var webClient = new System.Net.Http.HttpClient()) { retString = await webClient.GetStringAsync(douyinurl); } var jo = JObject.Parse(retString); var douyinvideo = jo["item_list"][0]["video"]["play_addr"]["url_list"][0].ToString(); if (string.IsNullOrEmpty(douyinvideo)) { throw new Exception("未找到视频地址"); } douyinvideo = douyinvideo.Replace("720p", "1080p"); //好像没啥作用 // 第三步 返回视频链接 douyinvideo = douyinvideo.Replace("aweme.snssdk.com/aweme/v1/playwm", "aweme.snssdk.com/aweme/v1/play"); Console.WriteLine(douyinvideo); //抖音视频链接 using (var center = new HttpClient()) { // 获取重定向链接(重定向之后才是视频的下载链接) center.DefaultRequestHeaders.Add("user-agent", " Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36"); var message = await center.GetAsync(douyinvideo); douyinvideo = message.RequestMessage.RequestUri.ToString(); if (string.IsNullOrEmpty(douyinvideo)) { throw new Exception("未找到视频地址"); } } //抖音视频保存 using (var webClient = new System.Net.Http.HttpClient()) { var stream = await webClient.GetByteArrayAsync(douyinvideo); var fileStream = new FileStream($"{videoid}.mp4", FileMode.Create, FileAccess.Write); fileStream.Write(stream, 0, stream.Length); fileStream.Dispose(); } } catch (Exception e) { Console.WriteLine(e.ToString()); throw; } ```