天天看點

如何下載下傳無水印的抖音視訊?

如何下載下傳無水印的抖音視訊?各大短視訊平台的做法幾乎都是一樣,有兩個接口或兩類型播放視訊位址,就是無水印、帶水印的視訊,我們的目的很清楚,就是分析平台的頁面源碼,找出沒有帶水印的視訊位址,然後下載下傳儲存下來,就這麼直接,下面說說我是如何拿到無水印的視訊位址的。

各大短視訊平台的做法幾乎都是一樣,有兩個接口或兩類型播放視訊位址,就是無水印、帶水印的視訊,我們的目的很清楚,就是分析平台的頁面源碼,找出沒有帶水印的視訊位址,然後下載下傳儲存下來,就這麼直接,下面說說我是如何拿到無水印的視訊位址的。

1、複制抖音“分享連結”。

随便打開一個抖音視訊,例如:

如何下載下傳無水印的抖音視訊?

2、将複制的位址在浏覽器(我用的是谷歌)打開,你會看到一個重定向跳轉位址。

如何下載下傳無水印的抖音視訊?

3、按F12打開調試視窗,切換到“NETWORK”=》“Preview”标簽欄,按F5重新整理頁面,點選我框框的這個位址。

如何下載下傳無水印的抖音視訊?

4、展開請求的響應資料(json格式的),找到url_list節點,這個就是視訊位址。

如何下載下傳無水印的抖音視訊?

5、複制視訊位址,然後将playwm修改為play,其他不變。

為什麼要改為play呢?怎麼知道的呢?這個大家可以複制抖音創作者的連結按照統一的方法,可以看到作品清單的位址,裡面就是沒有水印的位址,這裡就不展開詳細操作步驟了。

如何下載下傳無水印的抖音視訊?

6、将修改後的位址再次打開,這個視訊就是沒有水印的視訊,可以滑鼠儲存到本地。

注意,這樣同樣也做了一次重定向跳轉,重定向位址才是最終的無水印視訊位址。

如何下載下傳無水印的抖音視訊?

整個流程就完了。

這樣在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實作,這樣下載下傳就規避很多限制(主要是域名)。

如果大家有興趣學習研究的可以聯系我,或者搜尋小程式“短視訊去水印解析器工具”檢視效果。

多寫原創文章,多分享,幫助他人,快樂自己。

歡迎程式設計界的朋友,一起學習,一起交流。

關注公衆号“程式員之事”擷取更多資源。

繼續閱讀