教你下载无码的抖音视频(附去水印小程序示例)

发布时间:2024-03-28 内容来源:网络

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

随便打开一个抖音视频,例如:









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


注意,这样同样也做了一次重定向跳转,重定向地址才是最终的无水印视频地址。


整个流程就完了。

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

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

/// <summary>
/// 获取重定向URL
/// </summary>
/// <returns></returns>
private string GetRedirectUrl(string url)
{
    HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
    myRequest.UserAgent = UserAgent;
    myRequest.Referer = referer;
    myRequest.AllowAutoRedirect = false;
    HttpWebResponse myResponse = null;

    try
    {
        myResponse = (HttpWebResponse)myRequest.GetResponse();
    }
    catch (WebException ex)
    {
        if (ex.Message.Contains("302"))
        {
            myResponse = (HttpWebResponse)ex.Response;
        }
    }

    if (myResponse == null)
    {
        return null;
    }

    var redirectUrl = string.Empty;
    if (myResponse.Headers["Location"] != null)
    {
        redirectUrl = myResponse.Headers["Location"];
    }

    return redirectUrl;
}

2、从页面提取视频ID。

/// <summary>
/// 获取无水印视频路径
/// </summary>
/// <returns></returns>
public override Result GetResult()
{
    if (!Uri.IsWellFormedUriString(this.Url, UriKind.Absolute)) return new Result("参数有误");
    var redirectUrl = GetRedirectUrl(Url);
    if (string.IsNullOrWhiteSpace(redirectUrl)) return new Result("地址有误");
    Regex regex = new Regex("share/video/(?<ItemID>.+?)/", RegexOptions.IgnoreCase);

    if (regex.IsMatch(redirectUrl))
    {
        var itemId = regex.Match(redirectUrl).Groups["ItemID"].Value;
        var itemUrl = $"https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids={itemId}";

        WebClient client = new WebClient();
        client.Headers[HttpRequestHeader.UserAgent] = UserAgent;
        client.Headers[HttpRequestHeader.Referer] = referer;

        var content = client.DownloadString(itemUrl);
        var json = (JObject)JsonConvert.DeserializeObject(content);
        var status = json["status_code"].Value<int>();
        if (status != 0)
        {
            return new Result("获取数据失败");
        }
        else
        {
            var videoUrl = json.SelectToken("item_list[0].video.play_addr.url_list[0]");
            if (videoUrl != null && !string.IsNullOrWhiteSpace((string)videoUrl))
            {
                var playUrl = ((string)videoUrl).Replace("playwm", "play");

                Result result = new Result();
                result.Success = true;
                result.Message = "解析成功";
                result.Data = $"{GetRedirectUrl(playUrl)}";
                var resultUrl = GetRedirectUrl(playUrl);
                resultUrl = resultUrl.Replace("http:", "https:");
                result.Data = $"{resultUrl}";

                return result;
            }
        }
    }

    return new Result("解析失败");
}

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

var itemId = regex.Match(redirectUrl).Groups["ItemID"].Value;
var itemUrl = $"https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids={itemId}";

WebClient client = new WebClient();
client.Headers[HttpRequestHeader.UserAgent] = UserAgent;
client.Headers[HttpRequestHeader.Referer] = referer;

var content = client.DownloadString(itemUrl);

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

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

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

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

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

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


平台注册入口