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读取mp3中ID3信息的方法
Mar 05 Python
Python 功能和特点(新手必学)
Dec 30 Python
python+influxdb+shell编写区域网络状况表
Jul 27 Python
python批量复制图片到另一个文件夹
Sep 17 Python
python re.sub()替换正则的匹配内容方法
Jul 22 Python
Python中 CSV格式清洗与转换的实例代码
Aug 29 Python
Python使用matplotlib绘制三维参数曲线操作示例
Sep 10 Python
Python3实现二叉树的最大深度
Sep 30 Python
Python利用matplotlib绘制约数个数统计图示例
Nov 26 Python
Pandas直接读取sql脚本的方法
Jan 21 Python
flask框架中的cookie和session使用
Jan 31 Python
python四种出行路线规划的实现
Jun 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
sourcesafe管理phpproj文件的补充说明(downmoon)
2009/04/11 PHP
浅析Yii2 GridView 日期格式化并实现日期可搜索教程
2016/04/22 PHP
php str_getcsv把字符串解析为数组的实现方法
2017/04/05 PHP
Prototype源码浅析 String部分(一)之有关indexOf优化
2012/01/15 Javascript
JQuery事件e参数的方法preventDefault()取消默认行为
2013/09/26 Javascript
JavaScript获取客户端计算机硬件及系统等信息的方法
2014/01/02 Javascript
JQuery性能优化的几点建议
2014/05/14 Javascript
js中的getAttribute方法使用示例
2014/08/01 Javascript
javascript截取字符串小结
2015/04/28 Javascript
jquery插件pagination实现无刷新ajax分页
2015/09/30 Javascript
解决node.js安装包失败的几种方法
2016/09/02 Javascript
AngularJS入门示例之Hello World详解
2017/01/04 Javascript
layer弹出层中H5播放器全屏出错的解决方法
2017/02/21 Javascript
Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法
2017/07/09 Javascript
用Vue.js方法创建模板并使用多个模板合成
2019/06/28 Javascript
layui实现数据分页功能(ajax异步)
2019/07/27 Javascript
Vue Object.defineProperty及ProxyVue实现双向数据绑定
2020/09/02 Javascript
Python 过滤字符串的技巧,map与itertools.imap
2008/09/06 Python
Python读取Excel的方法实例分析
2015/07/11 Python
python检查字符串是否是正确ISBN的方法
2015/07/11 Python
Python文件监听工具pyinotify与watchdog实例
2018/10/15 Python
基于django 的orm中非主键自增的实现方式
2020/05/18 Python
实例代码讲解Python 线程池
2020/08/24 Python
Python如何使用vars返回对象的属性列表
2020/10/17 Python
python Yaml、Json、Dict之间的转化
2020/10/19 Python
Python代码覆盖率统计工具coverage.py用法详解
2020/11/25 Python
浏览器实现移动端高性能css3动画(开启gpu加速)
2013/12/23 HTML / CSS
泰国第一在线超市:Tops
2021/02/13 全球购物
员工培训邀请函
2014/01/11 职场文书
骨干教师培训感言
2014/01/16 职场文书
小学生志愿者活动方案
2014/08/23 职场文书
庆祝国庆节标语
2014/10/09 职场文书
社区安置帮教工作总结2015
2015/05/20 职场文书
司法廉洁教育心得体会
2016/01/20 职场文书
Go语言空白表示符_的实例用法
2021/07/04 Golang
Ajax实现三级联动效果
2021/10/05 Javascript