python将下载到本地m3u8视频合成MP4的代码详解


Posted in Python onNovember 24, 2020

代码如下所示:

import os
import requests
import datetime
from Crypto.Cipher import AES

def decode_key_file(key_file_name):
  with open(key_file_name,"r") as f:
    data=f.read()
  return data
def decode_m_file(m_file_name):
  with open(m_file_name,"r") as f:
    data=f.read()
  return data.split("\n")[6::2]

def decode_video(filename):
  data_list=[[],[],[]]
  file_list=os.listdir(filename)
  for one_file_name in file_list:
    if "m3u8" in one_file_name:
      data_list[0].append(filename+"/"+one_file_name)
    elif "key" in one_file_name:
      data_list[1].append(filename + "/" + one_file_name)
    else:
      data_list[2].append(filename + "/" + one_file_name)
  key=decode_key_file(data_list[1][0])
  name_list=decode_m_file(data_list[0][0])

  for one_name in name_list:
    for path_name in data_list[2]:
      if one_name in path_name:
        with open(path_name,"rb") as f:
          data_name=f.read()

        if len(key): # AES 解密
          cryptor = AES.new(key, AES.MODE_CBC, key)
          with open(key + ".mp4", 'ab') as f:
            f.write(cryptor.decrypt(data_name))


if __name__ == '__main__':
  decode_video("./data")

视频下载下来如下图所示

python将下载到本地m3u8视频合成MP4的代码详解

https://ngmov.me/?channelCode=ngdl50
这个应用下载下来的视频就是这样的解法

python将下载到本地m3u8视频合成MP4的代码详解

改进版本

def decode_key_file(key_file_name):
  with open(key_file_name, "r") as f:
    data = f.read()
  return data


def decode_m_file(m_file_name):
  with open(m_file_name, "r") as f:
    data = f.read()
  return data.split("\n")[6::2]


def decode_video(filename):
  data_list = [[], [], []]
  file_list = os.listdir(filename)
  for one_file_name in file_list:
    if "m3u8" in one_file_name:
      data_list[0].append(filename + "/" + one_file_name)
    elif "key" in one_file_name:
      data_list[1].append(filename + "/" + one_file_name)
    else:
      data_list[2].append(filename + "/" + one_file_name)
  try:
    key = decode_key_file(data_list[1][0])
  except:
    key = one_file_name
  name_list = decode_m_file(data_list[0][0])

  for one_name in name_list:
    for path_name in data_list[2]:
      if one_name in path_name:
        with open(path_name, "rb") as f:
          data_name = f.read()

        if len(key): # AES 解密
          cryptor = AES.new(key, AES.MODE_CBC, key)
          with open(key + ".mp4", 'ab') as f:
            f.write(cryptor.decrypt(data_name))
        else:
          with open(key + ".mp4", 'ab') as f:
            f.write(data_name)
            f.flush()


if __name__ == '__main__':
  data_list = os.listdir("/home/dfy/Videos/Download")
  index=0
  for path_one in data_list:
    index+=1
    if index<18:
      continue
    decode_video("/home/dfy/Videos/Download" + "/" + path_one)

到此这篇关于python将下载到本地m3u8视频合成MP4的代码详解的文章就介绍到这了,更多相关python把m3u8视频合成MP4内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
浅谈Python程序与C++程序的联合使用
Apr 07 Python
python中快速进行多个字符替换的方法小结
Dec 15 Python
使用DataFrame删除行和列的实例讲解
Apr 08 Python
Python之list对应元素求和的方法
Jun 28 Python
对python中的 os.mkdir和os.mkdirs详解
Oct 16 Python
Python字符串的常见操作实例小结
Apr 08 Python
python命令 -u参数用法解析
Oct 24 Python
python实现对列表中的元素进行倒序打印
Nov 23 Python
Python新手学习标准库模块命名
May 29 Python
关于python的缩进规则的知识点详解
Jun 22 Python
如何基于Python Matplotlib实现网格动画
Jul 20 Python
python装饰器代码解析
Mar 23 Python
Python做图像处理及视频音频文件分离和合成功能
Nov 24 #Python
Python调用Redis的示例代码
Nov 24 #Python
基于django和dropzone.js实现上传文件
Nov 24 #Python
Pycharm创建文件时自动生成文件头注释(自定义设置作者日期)
Nov 24 #Python
Django web自定义通用权限控制实现方法
Nov 24 #Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
Nov 24 #Python
Pycharm安装python库的方法
Nov 24 #Python
You might like
全国FM电台频率大全 - 8 黑龙江省
2020/03/11 无线电
PHP实现多条件查询实例代码
2010/07/17 PHP
php的hash算法介绍
2014/02/13 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
Prototype使用指南之base.js
2007/01/10 Javascript
javascript parseInt 函数分析(转)
2009/03/21 Javascript
JS getStyle获取最终样式函数代码
2010/04/01 Javascript
子窗体与父窗体传值示例js代码
2013/08/01 Javascript
AngularJS模块详解及示例代码
2016/08/17 Javascript
详解JavaScript 中getElementsByName在IE中的注意事项
2017/02/21 Javascript
详解给Vue2路由导航钩子和axios拦截器做个封装
2018/04/10 Javascript
详解Nuxt.js中使用Element-UI填坑
2019/09/06 Javascript
基于随机梯度下降的矩阵分解推荐算法(python)
2018/08/31 Python
Python并行分布式框架Celery详解
2018/10/15 Python
django项目登录中使用图片验证码的实现方法
2019/08/15 Python
pytorch numpy list类型之间的相互转换实例
2019/08/18 Python
详解python路径拼接os.path.join()函数的用法
2019/10/09 Python
python抓取多种类型的页面方法实例
2019/11/20 Python
Python 实现try重新执行
2019/12/21 Python
Pytorch 神经网络—自定义数据集上实现教程
2020/01/07 Python
基于Numba提高python运行效率过程解析
2020/03/02 Python
python的sys.path模块路径添加方式
2020/03/09 Python
Python如何使用27行代码绘制星星图
2020/07/20 Python
Python通过zookeeper实现分布式服务代码解析
2020/07/22 Python
Python 列表推导式需要注意的地方
2020/10/23 Python
CSS3中HSL和HSLA的简单使用示例
2015/07/14 HTML / CSS
HTML5未来发展趋势
2016/02/01 HTML / CSS
平面设计的岗位职责
2013/11/08 职场文书
内业资料员岗位职责
2014/01/04 职场文书
希特勒的演讲稿
2014/05/23 职场文书
报考公务员诚信承诺书
2014/08/29 职场文书
四风查摆问题及整改措施
2014/10/10 职场文书
批评与自我批评发言稿
2014/10/15 职场文书
2014年人事部工作总结
2014/12/03 职场文书
Java实现经典游戏泡泡堂的示例代码
2022/04/04 Java/Android
Python使用Opencv打开笔记本电脑摄像头报错解问题及解决
2022/06/21 Python