使用python 下載 mp4格式的騰訊視頻


將騰訊視頻本地化的方法

第一步查找視頻的地址

 

 

視頻的真實地址 保存session中 如上圖

找到視頻地址后,使用python下載騰訊視頻

2.這里使用的解釋器python3.5

需要安裝request 和 moviepy

安裝request

pip install requests

安裝moviepy

pip install moviepy 

安裝ffmpeg

如果之前沒安裝過 ffmpeg , 這個時候導入 moviepy 開始使用會報錯的, 所以我們可以先用 imageio 自帶的方法下載 ffmpeg

新建install_ffmpeg.py,並執行

文本文件

import imageio
import ssl

# 下面這一句不是必須的, 但是某些情況下訪問 https 會報SSL證書不受信任, 加上這一句可以允許通過
ssl._create_default_https_context = ssl._create_unverified_context

# 下載 ffmpeg 組件
imageio.plugins.ffmpeg.download()

3.下載視頻文件

# -*- coding:utf-8 -*-
import os
import sys
import requests
import datetime
from moviepy.editor import *


def LoadVideo(url):
    """
    騰訊視頻下載
    :param url: 視頻m3u8地址
    """
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"
    }
    download_path = os.getcwd() + "\download"
    if not os.path.exists(download_path):
        os.mkdir(download_path)
    # 新建日期文件夾
    download_path = os.path.join(download_path, datetime.datetime.now().strftime('%Y%m%d_%H%M%S'))
    os.mkdir(download_path)
    # 獲取第一層M3U8文件內容
    all_content = requests.get(url).text
    if "#EXTM3U" not in all_content:
        raise BaseException("非M3U8的鏈接")
    if "EXT-X-STREAM-INF" in all_content:  # 第一層
        file_line = all_content.split("\n")
        for line in file_line:
            if '.m3u8' in line:
                # 拼出第二層m3u8的URL
                url = url.rsplit("/", 1)[0] + "/" + line
                all_content = requests.get(url, headers=headers).text
    file_line = all_content.split("\n")
    file_index = 0
    for index, line in enumerate(file_line):  # 第二層
        if "#EXT-X-KEY" in line:  # 找解密Key
            method_pos = line.find("METHOD")
            comma_pos = line.find(",")
            method = line[method_pos:comma_pos].split('=')[1]
            uri_pos = line.find("URI")
            quotation_mark_pos = line.rfind('"')
            key_path = line[uri_pos:quotation_mark_pos].split('"')[1]
            key_url = url.rsplit("/", 1)[0] + "/" + key_path  # 拼出key解密密鑰URL
            res = requests.get(key_url)
            key = res.content
        # 找ts地址並下載
        if "EXTINF" in line:
            unknow = False
            # 拼出ts片段的URL
            pd_url = url.rsplit("/", 1)[0] + "/" + file_line[index + 1]
            file_index = file_index + 1;
            res = requests.get(pd_url)
            c_fule_name = str(file_index)
            with open(os.path.join(download_path, c_fule_name + ".mp4"), 'ab') as file:
                file.write(res.content)
                file.flush()
    merge_file(download_path)


def merge_file(path):
    """拼接視頻
    :param path: 相對路勁
    """
    # 定義一個數組
    video_list = []
    # 訪問 video 文件夾 (假設視頻都放在這里面)
    for root, dirs, files in os.walk(path):
        # 按文件名排序
        files.sort()
        # 遍歷所有文件
        index = 0
        for key in range(1, len(files)+1):
            for file in files:
                if os.path.splitext(file)[0] == str(key):
                    # 拼接成完整路徑
                    file_path = os.path.join(root, file)
                    # 載入視頻
                    video = VideoFileClip(file_path)
                    # 添加到數組
                    video_list.append(video)
                else:
                    continue

    # 拼接視頻
    final_clip = concatenate_videoclips(video_list)
    # 生成目標視頻文件
    video_path= os.getcwd() + r"\video"
    if not os.path.exists(video_path):
        os.mkdir(video_path)
    video_path+=datetime.datetime.now().strftime('%Y%m%d_%H%M%S')+'.mp4'
    final_clip.to_videofile(video_path, fps=24, remove_temp=False)


if __name__ == '__main__':
    url='https://apd-efee4483a80104df1441e1d8f701e125.v.smtcdns.com/moviets.tc.qq.com/AcJSehqEQQedX5zyfYdOaiIaP5bJA6OKzlhHQuz0B_ks/uwMROfz2r5xgoaQXGdGnC2df64gVTKzl5C_X6A3JOVT0QIb-/GNxCYNllJLj9fPO-_rwnUNxpuWQtjyD_Zjvlivsev-7Juyk91J-Ftx1kClENGySmxH5dxtb84XO54QtHzXfRWdOBlMT5uGHZG5qL-zOWccM1r0pTM8QDCj4jIRr0hv5_RG0pY1zfrq5A9rz0ZOVzcpWRN-VhPiwwgSvwGiu7_3k/o0017ets4aa.321004.ts.m3u8?ver=4'
    LoadVideo(url)
    #video=VideoFileClip("./download/20200416_140017/1.mp4")
    #videoClip = video.subclip(7,)
    #videoClip.to_videofile("./download/20200416_140017/01.mp4", fps=20)#輸出文件

  

提供一個可以看全網超前點播,全網免廣告的方法,其實也有很多現成的破解網站,也想弄個,奈何扛不住現實(租用服務器費用太高),手機和電腦通用。

其實就是拼接一個動態網址:

固定前綴

https://api.sigujx.com/?url=

加上視頻偽地址

https://v.youku.com/v_show/id_XNDYxNjI5Mjk4MA==.html?spm=a2hcb.12701310.app.5~5!2~5!3~5~5~5!7~5~5~5~A

 

結果:

https://api.sigujx.com/?url=https://v.youku.com/v_show/id_XNDYxNjI5Mjk4MA==.html?spm=a2hcb.12701310.app.5~5!2~5!3~5~5~5!7~5~5~5~A

這樣就可以看了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM