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登录Gmail并发送Gmail邮件的教程
Apr 17 Python
python编程通过蒙特卡洛法计算定积分详解
Dec 13 Python
Python实现螺旋矩阵的填充算法示例
Dec 28 Python
python机器学习理论与实战(五)支持向量机
Jan 19 Python
python处理csv数据动态显示曲线实例代码
Jan 23 Python
python使用生成器实现可迭代对象
Mar 20 Python
python中reader的next用法
Jul 24 Python
python for和else语句趣谈
Jul 02 Python
python使用pyecharts库画地图数据可视化的实现
Mar 25 Python
Python PyQt5模块实现窗口GUI界面代码实例
May 12 Python
python利用google翻译方法实例(翻译字幕文件)
Sep 21 Python
python 提取html文本的方法
May 20 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
学习discuz php 引入文件的方法DISCUZ_ROOT
2009/06/21 PHP
php 小乘法表实现代码
2009/07/16 PHP
新手学习PHP的一些基础知识分享
2011/07/27 PHP
php操作SVN版本服务器类代码
2011/11/27 PHP
使用php get_headers 判断URL是否有效的解决办法
2013/04/27 PHP
PHP调用C#开发的dll类库方法
2014/07/28 PHP
PHP获取文件行数的方法
2015/06/10 PHP
php 中的信号处理操作实例详解
2020/03/04 PHP
js removeChild 障眼法 可能出现的错误
2009/10/06 Javascript
treepanel动态加载数据实现代码
2012/12/15 Javascript
node.js中使用socket.io制作命名空间
2014/12/15 Javascript
jquery实现叠层3D文字特效代码分享
2015/08/21 Javascript
JavaScript获取浏览器信息的方法
2015/11/20 Javascript
node.js的事件机制
2017/02/08 Javascript
微信小程序 下拉菜单简单实例
2017/04/13 Javascript
JavaScript实现兼容IE6的收起折叠与展开效果实例
2017/09/20 Javascript
浅谈Angular路由复用策略
2017/10/04 Javascript
vue data引入本地图片的两种方式小结
2019/11/13 Javascript
JS实现表单中点击小眼睛显示隐藏密码框中的密码
2020/04/13 Javascript
详解Python3.1版本带来的核心变化
2015/04/07 Python
python将文本转换成图片输出的方法
2015/04/28 Python
Python3使用正则表达式爬取内涵段子示例
2018/04/22 Python
python实现DEM数据的阴影生成的方法
2019/07/23 Python
Win10环境中如何实现python2和python3并存
2020/07/20 Python
Python读写Excel表格的方法
2021/03/02 Python
全球速卖通:AliExpress(国际版淘宝)
2017/09/20 全球购物
东南亚旅游平台:The Trip Guru
2018/01/01 全球购物
伊莱克斯(Electrolux)俄罗斯网上商店:瑞典家用电器品牌
2021/01/23 全球购物
大学生职业生涯规划书模板
2014/01/03 职场文书
学子宴答谢词
2014/01/25 职场文书
入职担保书怎么写
2014/05/12 职场文书
励志演讲稿3分钟
2014/08/21 职场文书
党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
聚会通知怎么写
2015/04/23 职场文书
MongoDB修改oplog大小的四种方法
2022/04/11 MongoDB
Go gRPC进阶教程gRPC转换HTTP
2022/06/16 Golang