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内置的字符串处理函数整理
Jan 29 Python
在Python中处理时间之clock()方法的使用
May 22 Python
浅谈python中列表、字符串、字典的常用操作
Sep 19 Python
python shell根据ip获取主机名代码示例
Nov 25 Python
微信跳一跳python自动代码解读1.0
Jan 12 Python
python3读取excel文件只提取某些行某些列的值方法
Jul 10 Python
Python测试网络连通性示例【基于ping】
Aug 03 Python
基于python的itchat库实现微信聊天机器人(推荐)
Oct 29 Python
python生成器用法实例详解
Nov 22 Python
python随机数分布random均匀分布实例
Nov 27 Python
Python中url标签使用知识点总结
Jan 16 Python
python Paramiko使用示例
Sep 21 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
使用PHP的日期与时间函数技巧
2008/04/24 PHP
apache php模块整合操作指南
2012/11/16 PHP
解析php获取字符串的编码格式的方法(函数)
2013/06/21 PHP
php生成图形验证码几种方法小结
2013/08/15 PHP
PHP整数取余返回负数的相关解决方法
2014/05/15 PHP
php图片水印添加、压缩、剪切的封装类实现
2020/04/18 PHP
JavaScript 创建对象
2009/07/17 Javascript
使用js画图之画切线
2015/01/12 Javascript
JS实现网页每隔3秒弹出一次对话框的方法
2015/11/09 Javascript
深入理解JavaScript程序中内存泄漏
2016/03/17 Javascript
学做Bootstrap的第一个页面
2016/05/15 HTML / CSS
全屏滚动插件fullPage.js使用实例解析
2016/10/21 Javascript
JS实现动画兼容性的transition和transform实例分析
2016/12/13 Javascript
微信小程序使用checkbox显示多项选择框功能【附源码下载】
2017/12/11 Javascript
在mpvue框架中使用Vant WeappUI组件库的注意事项【推进】
2019/06/09 Javascript
vue 使用v-for进行循环的实例代码详解
2020/02/19 Javascript
怎么理解wx.navigateTo的events参数使用详情
2020/05/18 Javascript
python读取Android permission文件
2013/11/01 Python
在Python的Flask框架中使用日期和时间的教程
2015/04/21 Python
python通过伪装头部数据抵抗反爬虫的实例
2018/05/07 Python
Python爬虫实现的根据分类爬取豆瓣电影信息功能示例
2019/09/15 Python
python实现超市商品销售管理系统
2019/10/25 Python
Python正则表达式急速入门(小结)
2019/12/16 Python
在Python中使用K-Means聚类和PCA主成分分析进行图像压缩
2020/04/10 Python
Python如何设置指定窗口为前台活动窗口
2020/08/12 Python
Python Matplotlib绘图基础知识代码解析
2020/08/31 Python
海蓝之谜(LA MER)澳大利亚官方商城:全球高端奢华护肤品牌
2017/10/27 全球购物
Boden澳大利亚官网:英国在线服装公司
2018/08/05 全球购物
Myprotein芬兰官网:欧洲第一运动营养品牌
2019/05/05 全球购物
澳大利亚珠宝商:Shiels
2019/10/06 全球购物
应届生法律求职信
2013/10/22 职场文书
工厂厂长岗位职责
2013/11/08 职场文书
电子信息专业自荐书
2014/02/04 职场文书
2014年财政工作总结
2014/12/10 职场文书
《学会看病》教学反思
2016/02/17 职场文书
python​格式化字符串
2022/04/20 Python