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中django框架通过正则搜索页面上email地址的方法
Mar 21 Python
Python使用爬虫猜密码
Feb 19 Python
不同版本中Python matplotlib.pyplot.draw()界面绘制异常问题的解决
Sep 24 Python
python 编码规范整理
May 05 Python
Python numpy.array()生成相同元素数组的示例
Nov 12 Python
对Python闭包与延迟绑定的方法详解
Jan 07 Python
Python对ElasticSearch获取数据及操作
Apr 24 Python
seek引发的python文件读写的问题及解决
Jul 26 Python
详解Python利用random生成一个列表内的随机数
Aug 21 Python
python exit出错原因整理
Aug 31 Python
python如何修改文件时间属性
Feb 05 Python
python实现自动清理文件夹旧文件
May 10 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计算指定日期所在周的开始和结束日期的方法
2015/03/24 PHP
PHP实现笛卡尔积算法的实例讲解
2019/12/22 PHP
Locate a File Using a File Open Dialog Box
2007/06/18 Javascript
基于jQuery的动态表格插件
2011/03/28 Javascript
Javascript 按位取反运算符 (~)
2014/02/04 Javascript
Bootstrap模块dropdown实现下拉框响应
2016/05/22 Javascript
微信小程序开发之麦克风动画 帧动画 放大 淡出
2017/04/18 Javascript
vue之nextTick全面解析
2017/05/17 Javascript
js canvas实现放大镜查看图片功能
2017/06/08 Javascript
关于webpack2和模块打包的新手指南(小结)
2017/08/07 Javascript
如何通过javaScript去除字符串两端的空白字符
2020/02/06 Javascript
如何在selenium中使用js实现定位
2020/08/18 Javascript
如何在VUE中使用vue-awesome-swiper
2021/01/04 Vue.js
Python对象类型及其运算方法(详解)
2017/07/05 Python
python实现远程通过网络邮件控制计算机重启或关机
2018/02/22 Python
python简易远程控制单线程版
2018/06/20 Python
python实现多层感知器
2019/01/18 Python
Python+opencv 实现图片文字的分割的方法示例
2019/07/04 Python
Python求离散序列导数的示例
2019/07/10 Python
jupyter notebook 添加kernel permission denied的操作
2020/04/21 Python
Python实现爬取并分析电商评论
2020/06/19 Python
详解python polyscope库的安装和例程
2020/11/13 Python
LA MER海蓝之谜美国官网:传奇面霜
2016/08/27 全球购物
abstract class和interface有什么区别?
2012/01/03 面试题
资深财务管理人员自我评价
2013/09/22 职场文书
运动会领导邀请函
2014/02/05 职场文书
分公司经理任命书
2014/06/05 职场文书
医院党员公开承诺书
2014/08/30 职场文书
弘扬焦裕禄精神践行三严三实心得体会
2014/10/13 职场文书
采购员岗位职责
2015/02/03 职场文书
大学生个人学习总结
2015/02/15 职场文书
公司财务部岗位职责
2015/04/14 职场文书
PyTorch梯度裁剪避免训练loss nan的操作
2021/05/24 Python
pytorch锁死在dataloader(训练时卡死)
2021/05/28 Python
Golang中channel的原理解读(推荐)
2021/10/16 Golang
日本官方排名前10的动漫,名侦探柯南上榜,第一是一部创造历史的动漫
2022/03/18 日漫