热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用python下载mp4格式的腾讯视频

将腾讯视频本地化的方法第一步查找视频的地址视频的真实地址保存session中如上图找到视频地址后,使用python下载腾讯视频2.这里使用的解释器python3.5需要安装requ

将腾讯视频本地化的方法

第一步查找视频的地址

技术分享图片

 

 

视频的真实地址 保存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)#输出文件

  

 


推荐阅读
  • 本文介绍了如何通过安装 sqlacodegen 和 pymysql 来根据现有的 MySQL 数据库自动生成 ORM 的模型文件(model.py)。此方法适用于需要快速搭建项目模型层的情况。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • 如何在PHP中安装Xdebug扩展
    本文介绍了如何从PECL下载并编译安装Xdebug扩展,以及如何配置PHP和PHPStorm以启用调试功能。 ... [详细]
  • 本文探讨了在一个物理隔离的环境中构建数据交换平台所面临的挑战,包括但不限于数据加密、传输监控及确保文件交换的安全性和可靠性。同时,作者结合自身项目经验,分享了项目规划、实施过程中的关键决策及其背后的思考。 ... [详细]
  • importjava.io.*;importjava.util.*;publicclass五子棋游戏{staticintm1;staticintn1;staticfinalintS ... [详细]
  • 解决Visual Studio Code中PHP Intelephense误报问题
    PHP作为一种高度灵活的编程语言,其代码结构可能导致Intelephense插件在某些情况下报告不必要的错误或警告。自1.3.3版本起,Intelephense引入了多个配置选项,允许用户根据具体的工作环境和编程风格调整这些诊断信息的显示。 ... [详细]
  • 心理学经典:《思考致富》
    《思考致富》是由美国著名成功学大师拿破仑·希尔撰写的一部重要著作,该书基于希尔长达20年的深入研究和访谈,探讨了个人成功的核心要素。书中不仅揭示了成功的关键,还提供了一系列实用的方法和策略。 ... [详细]
  • 本文将详细介绍如何在二进制和十六进制之间进行准确的转换,并提供实际的代码示例来帮助理解这一过程。 ... [详细]
  • empty,isset首先都会检查变量是否存在,然后对变量值进行检测。而is_null只是直接检查变量值,是否为null,因此如果变量未定义就会出现错误!检测一个变量是否是null ... [详细]
  • 在处理大数据量的SQL分页查询时,通常需要执行两次查询来分别获取数据和总记录数。本文介绍了一种优化方法,通过单次查询同时返回分页数据和总记录数,从而提高查询效率。 ... [详细]
  • 本文通过一个具体的实例,介绍如何利用TensorFlow框架来计算神经网络模型在多分类任务中的Top-K准确率。代码中包含了随机种子设置、模拟预测结果生成、真实标签生成以及准确率计算等步骤。 ... [详细]
  • 嵌套列表的扁平化处理
    本文介绍了一种方法,用于遍历嵌套列表中的每个元素。如果元素是整数,则将其添加到结果数组中;如果元素是一个列表,则递归地遍历这个列表。此方法特别适用于处理复杂数据结构中的嵌套列表。 ... [详细]
  • 本文详细探讨了BCTF竞赛中窃密木马题目的解题策略,重点分析了该题目在漏洞挖掘与利用方面的技巧。 ... [详细]
  • 1#include2#defineM1000103#defineRGregister4#defineinf0x3f3f3f3f5usingnamespacestd;6boolrev ... [详细]
author-avatar
希望全家人都幸福_870
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有