精华内容
下载资源
问答
  • 短视频解析技术原理,去水印原理分析整理汇总抖音皮皮虾B站火山微视 抖音 皮皮虾 B站 火山 微视

    抖音

    (新)最新抖音无水印解析原理再分析过程,柳暗花明又一村 - 2019-10-30

    皮皮虾

    实战PHP皮皮虾去水印解析接口

    皮皮虾视频抓包去水印教程原理

    B站

    火山

    微视

    趣头条

    UC

    微博

    严正声明:以下文章仅限于学习交流,请勿用于其他用途

    如果你对这方面有兴趣,可以入群交流

    621400207
    
    展开全文
  • 这里写自定义目录标题抖音Api分析,抖音去水印原理,最新源码原理分析程序效果源代码 抖音Api分析,抖音去水印原理,最新源码 今天发现之前自动下载抖音去水印视频的代码失效,在原有代码(网络代码)基础上做了重新...

    抖音Api分析,抖音去水印原理,最新Python源码

    (2021-03-05更新)


    ## 前言

    今天发现之前自动下载抖音去水印视频的代码失效,在原有代码(网络代码)基础上做了重新修改,实现通过分享链接获取抖音无水印视频

    原理分析

    1. 通过查看网页源码

      分享链接 eg:

      感谢网络改变了我 以前我很害羞说话结巴 现在我狂的已经不是人了  	https://v.douyin.com/e19qsb9/ 复淛此链接,达开Dou音搜索,値接观kan视频!
      

    在这里插入图片描述
    进入开发者模式,查看页面元素,可以找到视频的真实地址,即红框里的内容。

    https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0300fa20000c0mfph08fo8471k9r4s0&ratio=720p&line=0
    

    直接打开此地址即可下载此视频,可惜还没有去水印
    大家应该知道把playwm替换成play后,该地址就是原视频(无水印)的地址
    用浏览器打开新地址,即可下载无水印的视频啦

    https://aweme.snssdk.com/aweme/v1/play/?video_id=v0300fa20000c0mfph08fo8471k9r4s0&ratio=720p&line=0
    

    总结:原理还是很简单的,可以同手工的方式去下载 ,但还是有点麻烦。

    1. 通过python程序代码

    同样方式打开链接地址,查看真实访问链接,获取视频的唯一标识号
    在这里插入图片描述
    与此同时,查看Fiddler捕获的url

    在这里插入图片描述

    红框里的链接即为抖音的Api,获取到JSON数据,蓝框里的内容即为视频真是下载地址。

    https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=6930192161220693261
    https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0300fa20000c0mfph08fo8471k9r4s0&ratio=720p&line=0
    

    程序简单流程
    在这里插入图片描述

    程序效果

    在这里插入图片描述
    在这里插入图片描述

    源代码

    用到的包:
    在这里插入图片描述
    工具:
    1.chromedriver.exe
    2.chrome
    3.vscode
    4.Fiddler

    付费下载地址:https://download.csdn.net/download/hjn0618/15514789
    加 wx:hjnsyl520 免费获取源码
    在这里插入图片描述

    展开全文
  • Nodejs+Express 抖音去水印原理及源码

    热门讨论 2020-10-16 15:11:54
    Nodejs+Express 去水印原理及源码 1.获取链接 去 抖音 获取视频的分享链接。 复制的链接应该是这个样子的: #在抖音,记录美好生活#燃剪一波,请各位务必看到最后哦#火影忍者#这个视频有点长...

     

    1.获取链接


    去 抖音 获取视频的分享链接。


    复制的链接应该是这个样子的:

    #在抖音,记录美好生活#燃剪一波,请各位务必看到最后哦 #火影忍者  #这个视频有点长  http://v.douyin.com/xKWBQ8/ 复制此链接,打开【抖音短视频】,直接观看视频!

    2.打开链接

    使用Google浏览器打开我们获取的视频链接 http://v.douyin.com/xKWBQ8/
    此时我们看到地址栏发生了变化 说明这个链接进行了一次跳转 此时的链接变成了

    https://www.iesdouyin.com/share/video/6731539814845254920/?region=CN&mid=6731536658115595021&u_code=lgemhi3e&titleType=title&utm_source=copy_link&utm_campaign=client_share&utm_medium=android&app=aweme

    3.开始抓包

    4.得到接口

    https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=6731539814845254920

    双击打开这个链接你会发现出现一堆JSON 大家可以去 https://www.json.cn/ 格式化一下方便查看(在火狐浏览器打开会自动帮你解析)

    格式化之后 按下键盘Ctrl+F搜索video这样我们就得到了视频URL

    但是打开链接发现依然是有水印的URL

    https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0300fd70000blljirihh3mhogbf2qr0&ratio=720p&line=0

    这时候只要把url 里面的 playwm 改成 play 打开就获得了无水印的url;;

    注意:我们在自己的网站中引用其它网站的资源URL,由于不在同一个域名下referrer 不同,通常会遇到三方网站的防盗链拦截,所以要想正常访问三方资源,必须要隐藏请求的referrer,页面中设置如下参数。

     <!-- 解决访问视频url 请求403异常 -->
     <meta name="referrer" content="no-referrer"/>
    

    这时候如果你想测试链接是否有效你可以 使用 Postman 来测试视频

    思路

    // 获取的分享链接
    http://v.douyin.com/xKWBQ8/
    // 跳转后的链接
    https://www.iesdouyin.com/share/video/6731539814845254920/?region=CN&mid=6731536658115595021&u_code=lgemhi3e&titleType=title&utm_source=copy_link&utm_campaign=client_share&utm_medium=android&app=aweme
    // 我们抓到的官方接口
    https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=6731539814845254920

    仔细观察这一串数字 6706391587317881095是不是我们获取跳转后的链接 video/ 和 /?region中的这串数字 填写到官方接口item_ids=6706391587317881095就得到了视频下载地址 省掉了中间抓包的繁琐

    代码演示

    
    var request = require('request');
    
    let send = {
        'Error:':'查询失败',
        'code':400,
    }
    
    let Videowm = async (req, res, next)=>{
    
        let { url } = req.query;
        url = httpString(url);
    
        //前端传过来的地址 进行重定向拿到 item_ids 并且返回
        let watermark = await new Promise(resolve=>{
            request(url,(error, response, body) => {
            if (!error && response.statusCode == 200) {
                let href = response.request.href;
                let id = void 0;
                try {
                    id = href.match(/video\/(\S*)\/\?region/)[1];
                } catch (error) {
                    res.json(send)
                    return false;
                }
                resolve(`https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=${id}`);
            }else{
                res.json(send)
            }
            })
        });
        
        //拿到完整地址返回指定数据 
        request(watermark,async (error, response, body)=>{
            if (!error && response.statusCode == 200) {
    
                let result = JSON.parse(body);
                let data = result.item_list[0];
                //视频url解析
                let video = await videourl(data['video']["play_addr"]["url_list"][0]);
                // 拼接返回指定数据
                res.json({
                    'title':data["share_info"]["share_title"],
                    'cover':data['video']["origin_cover"]["url_list"][0],
                    'video':video,
                    'audio':data['music']["play_url"]["uri"],
                    'code':200,
                })
            }else{
                res.json(send)
            }
        })
    }
    
    //解析视频
    const videourl = async (url)=>{
       //截取字符串 wm
       url = url.replace(/wm/g,'');
       return await new Promise(resolve=>{
        request(url,(error, response, body) => {
            resolve(response.request.href)
        })
       })
    }
    
    //解析字符串里面的url
    const httpString = (s) =>{
        let reg = /(https?|http|ftp|file):\/\/[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]/g;
        try {
            return s.match(reg)[0];
        } catch (error) {
            return null;
        }
    }
    
    module.exports = {
        Videowm
    }

    -------------------------------------------------------------------------------------

    亲测有效

    https://www.acid02.com/api/video?url=http://v.douyin.com/xKWBQ8/

    展开全文
  • 趣头条视频解析去水印原理分析过程,简单又有趣
    var Q_qun = '695623459';
    console.log("Welcome you!");
    

    拿到两个趣头条视频的分享链接如下

    [精选] 同样是单身狗,第三个才是实至名归。查看http://new.3qtt.cn/1hKLnp
    [热门]太原出土了一口黄金棺材,为何专家却不敢打开,里面有...。查看http://new.3qtt.cn/1hKLox
    

    1.无水印视频源

    网页端视频
    很幸运了,网页端直接给出了无水印视频。那就直接在网页端找解析途径旧OK了。

    2.解析途径

    首先查看网页源码:
    网页源码
    像上面这样子的,没有办法,接下来看网络请求
    成功找到一个很敏感的jsonp请求
    在这里插入图片描述

    3.接口分析

    该接口如下:

    curl 'http://html2.qktoutiao.com/detail/jsonp/1461642/14616415/146164143/1461641430.js?_=1575335580658&callback=Zepto1575335580609' 
    -H 'Referer: http://art.lywka.cn/share/detail/video_out.html?content_id=1461641430&key=1ca4BBgiVUXnZSyXFdilmUT3lVqh_EoXtp9cdZut1eAbZRXnzz22Bu3K_eTMSeFaJWZDz7xU40JWNBXKBri_2OOQa9nEjb6_lP2aeQG4ucVWeTPPZvsSn31t4EONOkLGbsPV2tAMCnEcxaZBrVp2nh6YBkkH8ZYxJWlq&pv_id=&cid=2&jsonp=%2F%2Fhtml2.qktoutiao.com%2Fdetail%2Fjsonp%2F1461642%2F14616415%2F146164143%2F1461641430.js&fr=2&i=2886747874&shareContentType=2' 
    -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36' 
    --compressed
    

    在这里插入图片描述
    经过验证,请求头及请求参数均可省去,如下请求即可正常请求

    http://html2.qktoutiao.com/detail/jsonp/1461642/14616415/146164143/1461641430.js
    

    请求返回如下

    cb({
    	"title": "同样是单身狗,第三个才是实至名归",
    	"source": "",
    	"createTime": "2019-11-28 17:56:54",
    	"detail": "{\\\"type\\\":\\\"qtg\\\",\\\"value\\\":\\\"web_3864d97e2ea7362bfeb8ebc31bfe8a8a\\\",\\\"address\\\":[{\\\"file_id\\\":\\\"web_3864d97e2ea7362bfeb8ebc31bfe8a8a\\\",\\\"url\\\":\\\"toutiao_video_zdgq_online_self\\\\\/6fcd4db33f8a5ab29a13747b15c8ff76\\\\\/hld.mp4\\\",\\\"size\\\":\\\"510994\\\",\\\"duration\\\":\\\"37\\\",\\\"format\\\":\\\"mp4\\\",\\\"bitrate\\\":\\\"112\\\",\\\"definition\\\":\\\"hld\\\"},{\\\"file_id\\\":\\\"web_3864d97e2ea7362bfeb8ebc31bfe8a8a\\\",\\\"url\\\":\\\"toutiao_video_zdgq_online_self\\\\\/6fcd4db33f8a5ab29a13747b15c8ff76\\\\\/hd.mp4\\\",\\\"size\\\":\\\"2208282\\\",\\\"duration\\\":\\\"37\\\",\\\"format\\\":\\\"mp4\\\",\\\"bitrate\\\":\\\"486\\\",\\\"definition\\\":\\\"hd\\\"},{\\\"file_id\\\":\\\"web_3864d97e2ea7362bfeb8ebc31bfe8a8a\\\",\\\"url\\\":\\\"toutiao_video_zdgq_online_self\\\\\/6fcd4db33f8a5ab29a13747b15c8ff76\\\\\/hhd.mp4\\\",\\\"size\\\":\\\"741034\\\",\\\"duration\\\":\\\"37\\\",\\\"format\\\":\\\"mp4\\\",\\\"bitrate\\\":\\\"163\\\",\\\"definition\\\":\\\"hhd\\\"},{\\\"file_id\\\":\\\"web_3864d97e2ea7362bfeb8ebc31bfe8a8a\\\",\\\"url\\\":\\\"toutiao_video_zdgq_online_self\\\\\/6fcd4db33f8a5ab29a13747b15c8ff76\\\\\/ld.mp4\\\",\\\"size\\\":\\\"996722\\\",\\\"duration\\\":\\\"37\\\",\\\"format\\\":\\\"mp4\\\",\\\"bitrate\\\":\\\"219\\\",\\\"definition\\\":\\\"ld\\\"}]}",
    	"keywords": "娱乐,社会,搞笑,生活,小姐姐",
    	"description": "",
    	"nickname": "农村帅小伙",
    	"avatar": "http:\/\/static.1sapp.com\/qupost\/avatar\/2019\/08\/04\/1564922926378541353.jpg?imageView2\/1\/h\/120\/w\/120\/q\/90",
    	"authorid": "1979410"
    })
    

    很明显的一个jsonp请求,和视频相关的最关键的数据就是 detail字段 了,一起来看看detail字段的详情

    {
    	"type": "qtg",
    	"value": "web_3864d97e2ea7362bfeb8ebc31bfe8a8a",
    	"address": [{
    		"file_id": "web_3864d97e2ea7362bfeb8ebc31bfe8a8a",
    		"url": "toutiao_video_zdgq_online_self\\/6fcd4db33f8a5ab29a13747b15c8ff76\\/hld.mp4",
    		"size": "510994",
    		"duration": "37",
    		"format": "mp4",
    		"bitrate": "112",
    		"definition": "hld"
    	}, {
    		"file_id": "web_3864d97e2ea7362bfeb8ebc31bfe8a8a",
    		"url": "toutiao_video_zdgq_online_self\\/6fcd4db33f8a5ab29a13747b15c8ff76\\/hd.mp4",
    		"size": "2208282",
    		"duration": "37",
    		"format": "mp4",
    		"bitrate": "486",
    		"definition": "hd"
    	}, {
    		"file_id": "web_3864d97e2ea7362bfeb8ebc31bfe8a8a",
    		"url": "toutiao_video_zdgq_online_self\\/6fcd4db33f8a5ab29a13747b15c8ff76\\/hhd.mp4",
    		"size": "741034",
    		"duration": "37",
    		"format": "mp4",
    		"bitrate": "163",
    		"definition": "hhd"
    	}, {
    		"file_id": "web_3864d97e2ea7362bfeb8ebc31bfe8a8a",
    		"url": "toutiao_video_zdgq_online_self\\/6fcd4db33f8a5ab29a13747b15c8ff76\\/ld.mp4",
    		"size": "996722",
    		"duration": "37",
    		"format": "mp4",
    		"bitrate": "219",
    		"definition": "ld"
    	}]
    }
    
    字段 类型 说明 备注
    file_id string 顾名思义
    url string 视频链接 不完整
    size int 视频大小
    duration int 视频时长
    format string 视频封装格式
    bitrate int 比特率
    definition string 视频清晰度

    首先,同一个视频 不同清晰度file_id相同
    其次,根据视频的 sizebitrate,可以确定不同清晰度的视频质量有如下关系

    hd > ld > hhd > hld
    

    hd 级别的清晰度是质量最高的视频源

    4.hd视频源

    先看看我们正常播放用到的视频链接
    播放视频
    我去,不会吧,竟然是ld的,要下载这个视频也没什么卵用,那就直接拿hd的玩玩吧

    http://v4.qutoutiao.net/toutiao_video_zdgq_online_self/6fcd4db33f8a5ab29a13747b15c8ff76/ld.mp4
    

    上面是ld级别的完整视频链接。那hd级别的就是下面了

    http://v4.qutoutiao.net/toutiao_video_zdgq_online_self/6fcd4db33f8a5ab29a13747b15c8ff76/hd.mp4
    

    hd视频
    成功了。

    5.完工了?

    看到这里,很开心,完工了,拿到无水印视频了~~~
    真的吗?那下面这个接口从哪里来的呢?

    http://html2.qktoutiao.com/detail/jsonp/1461642/14616415/146164143/1461641430.js
    

    趣头条解析原理的有趣也正在这里,目前呢,有两种方式获取上面这个接口的地址
    http://art.lywka.cn/share/detail/video_out.html?content_id=1461641430&key=1ca4BBgiVUXnZSyXFdilmUT3lVqh_EoXtp9cdZut1eAbZRXnzz22Bu3K_eTMSeFaJWZDz7xU40JWNBXKBri_2OOQa9nEjb6_lP2aeQG4ucVWeTPPZvsSn31t4EONOkLGbsPV2tAMCnEcxaZBrVp2nh6YBkkH8ZYxJWlq&pv_id=&cid=2&jsonp=%2F%2Fhtml2.qktoutiao.com%2Fdetail%2Fjsonp%2F1461642%2F14616415%2F146164143%2F1461641430.js&fr=2&i=2886747874&shareContentType=2

    上面是短链重定向的地址了,眼尖的朋友一定发现了

    content_id=1461641430
    

    眼更尖,尖到变态的朋友也一定发现了

    jsonp=%2F%2Fhtml2.qktoutiao.com%2Fdetail%2Fjsonp%2F1461642%2F14616415%2F146164143%2F1461641430.js
    

    也正是上面的两种发现,会有两种不同的获取接口地址方式。

    5.1 短链重定向获取

    首先是发现jsonp的朋友,他会这样去分析了

    jsonp=%2F%2Fhtml2.qktoutiao.com%2Fdetail%2Fjsonp%2F1461642%2F14616415%2F146164143%2F1461641430.js
    

    首先urldecode,得到

    jsonp=//html2.qktoutiao.com/detail/jsonp/1461642/14616415/146164143/1461641430.js
    

    一步到位,直接到达了高潮

    5.2 自行计算

    那发现content_id的朋友就会更有趣味性了

    content_id=1461641430
    

    真实的url地址如下

    html2.qktoutiao.com/detail/jsonp/1461642/14616415/146164143/1461641430.js
    

    出现的数字从后向前排列一下,来寻找规律

    数字 序号
    1461641430 0
    146164143 1
    14616415 2
    1461642 3

    已经看出了点什么了吧!当然,一个并不能说明什么,那就多来几个!最后你会发现下面的规律。

    1.存在一个函数 qtt_fun ,伪代码如下

    def qtt_fun(num):
        return num%10 == 0?  num/10 : num/10 +1 
    

    如果模10有余,就在除以10后的结果上加一,否则不加一
    2.存在下列计算,伪代码

    path0 = 1461641430
    path1 = qtt_fun(path0)
    path2 = qtt_fun(path1)
    path3 = qtt_fun(path2)
    url = "html2.qktoutiao.com/detail/jsonp/" + path3 + "/" + path2 + "/" + path1 + "/" + path0 + ".js"
    

    好了,到现在才算是真的完工了。

    6.源码

    import requests
    import json
    import time
    from urllib.parse import unquote
    
    requests.packages.urllib3.disable_warnings()
    
    HEADERS = {
        'accept-encoding': 'gzip, deflate, br',
        'accept-language': 'zh-CN,zh;q=0.9',
        'pragma': 'no-cache',
        'cache-control': 'no-cache',
        'upgrade-insecure-requests': '1',
        'user-agent': "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1",
    }
    
    def getRealPlayAddress(url):
        res = requests.get(url, headers=HEADERS, allow_redirects=False)
        if res.status_code == 302:
            long_url = res.headers['Location']
            HEADERS3['Referer'] = long_url
            return long_url
        return None
    
    
    
    def parseQutoutiao(url_qutoutiao):
        try:
            realUrl = getRealPlayAddress(url_qutoutiao)
            requestUrl = realUrl.split('&jsonp=')[1].split('&')[0]
            requestUrl = 'http:' + unquote(requestUrl, 'utf-8')
            mResponse = requests.get(requestUrl, verify=False).content.decode('UTF-8')
            mResponse = mResponse[3:]
            mResponse = mResponse[:-1]
            mJson = json.loads(mResponse)
            videoUrls = json.loads(mJson['detail'].replace('\\', ''))['address']
            videoUrl = ''
            try:
                for item in videoUrls:
                    if item['definition'] == 'hd':
                        videoUrl = 'http://v4.qutoutiao.net/' + item['url']
                        break
            except:
                videoUrl = 'http://v5.qutoutiao.net/' + videoUrls
            return videoUrl 
        except:
            return '解析失败'
    
    
    展开全文
  • (对抖音程序员隔空笔芯)抖音解析去水印iteminfo接口被封死,再放一个最新的去水印原理,无视频长度限制
  • 看点快报视频解析去水印原理及源码,初窥腾讯视频的解析奥妙。 1寻找视频源 2视频源参数构成分析 3寻找众参数 4拂去蒙尘,找到锁孔 5取钥匙 6源码实现 7总结
  • 快手短视频解析去水印原理及源码,sign+盐签名算法,获得无水印播放地址。 快手签名算法源码
  • 小咖秀视频解析去水印原理及原理,x-sign签名算法,获得无水印播放地址 获取请求发起时时间戳,根据签名算法生成签名,直接请求上述官方接口,即可获取无水印视频源。
  • uc视频解析去水印原理分析,集齐四大参数,兑换UC视频播放地址 集齐token、ums_id、wm_cid、wm_id四大金刚,即可兑换uc视频播放地址
  • 大家平时在收集视频素材时候,可能会看见某某短视频...那么下面小编就简单,教大家如何轻松去除短视频水印,和短视频去水印是什么原理?一、短视频如何去水印?当用户把自己的作品上传到短视频平台后,编辑会打上...
  • 短视频解析,去水印原理整理汇总

    万次阅读 2019-10-17 17:21:28
    这里整理汇总关于短视频去水印解析的技术文章 抖音、微视、趣头条、UC、火山等等
  • 快手去水印原理就是这么简单,直接就拿到了视频的无水印播放链接。 4。面临的挑战 简单的原理之下,是艰巨的挑战。 当请求特别频繁并且超过快手设置的频率阈值后,发起请求的ip就会被封。只能挂代理解决,从而...
  • 抖音 一,首先获取分享短链接 (一)我打12360他竟告诉我不可以订票?#洛阳综合保税区# #海关 ... ...将短链接在网页上打开 首先 查看元素(F12),调整为手机模式 如上图,302重定向到一个新的地址: ...
  • 1.打开抖音链接,获取下图的这个item_id 2.之后使用这个接口请求就ok了 ... 3.把 playwm 改成 play 更多技术学习破解可以关注csdn和微信公众号同号 “java微技术” ...
  • 1.昨晚20200427抖音进行系统升级,大家在web端获取无水印原理的朋友,又烦一波,今天进行升级后,是这样的 https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=6820019577829739788&dytk=...
  • 有的手机浏览器不支持视频下载功能,但是,能看到视频,就证明可以直接下载, 知道了它的原理,就可以编写python代码,实现一键下载啦。 手机可以看,电脑不能看,问题基本就在user-agent, 经测试发现,只要头信息...
  • QQ_qun= "1020598620"; 不知道在看这篇文章前,是否有看到网上很多逆向js拿美拍美拍视频地址的方法,因为现在美拍网页端已经不返回无水印地址了,所以这个方法也就无用了,因此只有从APP下手。...
  • 一个看点视频的分享链接如下 ...x5PreFetch=1&channel_id=29&rowkey=1595dc76397577ah 1.无水印视频源 首先,移动UA访问内容链接,我们可以直接拿到无水印的视频播放链接。 接下来,我们就来分析和寻找这个...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 140
精华内容 56
关键字:

去水印原理