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中asyncore的用法实例
Sep 29 Python
Python深入06——python的内存管理详解
Dec 07 Python
Ubuntu下使用Python实现游戏制作中的切分图片功能
Mar 30 Python
python 读入多行数据的实例
Apr 19 Python
对Python捕获控制台输出流的方法详解
Jan 07 Python
Python3实现汉语转换为汉语拼音
Jul 08 Python
python面向对象 反射原理解析
Aug 12 Python
Python 类属性与实例属性,类对象与实例对象用法分析
Sep 20 Python
Python re正则表达式元字符分组()用法分享
Feb 10 Python
Python3监控疫情的完整代码
Feb 20 Python
Python内置函数property()如何使用
Sep 01 Python
python实现网页录音效果
Oct 26 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
星际争霸秘籍
2020/03/04 星际争霸
web方式ftp
2006/10/09 PHP
PHP统计数值数组中出现频率最多的10个数字的方法
2015/04/20 PHP
php session的锁和并发
2016/01/22 PHP
php实现将base64格式图片保存在指定目录的方法
2016/10/13 PHP
php中青蛙跳台阶的问题解决方法
2018/10/14 PHP
基于JQuery的简单实现折叠菜单代码
2010/09/15 Javascript
JavaScript高级程序设计 错误处理与调试学习笔记
2011/09/10 Javascript
jQuery动态显示和隐藏datagrid中的某一列的方法
2013/12/11 Javascript
javascript对话框使用方法(警告框 javascript确认框 提示框)
2014/01/07 Javascript
js 删除数组的几种方法小结
2014/02/21 Javascript
AngularJS通过$http和服务器通信详解
2016/09/21 Javascript
详解JavaScript的内置对象
2016/12/07 Javascript
JS验证码实现代码
2017/09/14 Javascript
谈谈React中的Render Props模式
2018/12/06 Javascript
如何根据业务封装自己的功能组件
2019/04/19 Javascript
浅谈Layui的eleTree树式选择器使用方法
2019/09/25 Javascript
Vue $attrs &amp; inheritAttr实现button禁用效果案例
2020/12/07 Vue.js
Python中使用tarfile压缩、解压tar归档文件示例
2015/04/05 Python
Django学习笔记之Class-Based-View
2017/02/15 Python
python判断一个集合是否为另一个集合的子集方法
2018/05/04 Python
pytorch对可变长度序列的处理方法详解
2018/12/08 Python
python解释器spython使用及原理解析
2019/08/24 Python
使用Bazel编译TensorBoard教程
2020/02/15 Python
Jupyter notebook 启动闪退问题的解决
2020/04/13 Python
python获取系统内存占用信息的实例方法
2020/07/17 Python
Python如何给你的程序做性能测试
2020/07/29 Python
自考生自我鉴定范文
2013/10/01 职场文书
培训主管的职业生涯规划
2014/03/06 职场文书
家长学校工作方案
2014/05/07 职场文书
广播体操比赛口号
2014/06/10 职场文书
给老婆的道歉信
2015/01/20 职场文书
早会开场白台词大全
2015/06/01 职场文书
PHP控制循环操作的时间
2021/04/01 PHP
thinkphp 获取控制器及控制器方法
2021/04/16 PHP
SpringBoot项目部署到阿里云服务器的实现步骤
2022/06/28 Java/Android