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实现socket端口重定向示例
Feb 10 Python
numpy使用技巧之数组过滤实例代码
Feb 03 Python
python 实现登录网页的操作方法
May 11 Python
Python应用库大全总结
May 30 Python
opencv python 图像轮廓/检测轮廓/绘制轮廓的方法
Jul 03 Python
Python企业编码生成系统之主程序模块设计详解
Jul 26 Python
Flask框架重定向,错误显示,Responses响应及Sessions会话操作示例
Aug 01 Python
python破解bilibili滑动验证码登录功能
Sep 11 Python
Python grpc超时机制代码示例
Sep 14 Python
pytorch实现手写数字图片识别
May 20 Python
python数据可视化JupyterLab实用扩展程序Mito
Nov 20 Python
Python docx库删除复制paragraph及行高设置图片插入示例
Jul 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
音乐朗读剧《MARS RED》2021年TV动画化决定!
2020/03/06 日漫
基于mysql的论坛(5)
2006/10/09 PHP
php删除文件夹及其文件夹下所有文件的函数代码
2013/01/23 PHP
linux环境apache多端口配置虚拟主机的方法深入介绍
2013/06/09 PHP
PHP 基于Yii框架中使用smarty模板的方法详解
2013/06/13 PHP
CakePHP框架Model函数定义方法示例
2017/08/04 PHP
php实现数字补零的方法总结
2018/09/12 PHP
PHP安装BCMath扩展的方法
2019/02/13 PHP
Javascript模块化编程详解
2014/12/01 Javascript
jquery+ajax验证不通过也提交表单问题处理
2014/12/12 Javascript
jquery实现在网页指定区域显示自定义右键菜单效果
2015/08/25 Javascript
jQuery prototype冲突的2种解决方法(附demo示例下载)
2016/01/21 Javascript
详解获取jq ul第一个li定位的四种解决方案
2016/11/23 Javascript
详解AngularJs路由之Ui-router-resolve(预加载)
2017/06/13 Javascript
bootstrap table实现x-editable的行单元格编辑及解决数据Empty和支持多样式问题
2017/08/10 Javascript
浅谈Angular2 ng-content 指令在组件中嵌入内容
2017/08/18 Javascript
微信小程序购物车、父子组件传值及calc的注意事项总结
2018/11/14 Javascript
vue draggable resizable gorkys与v-chart使用与总结
2019/09/05 Javascript
[01:18:36]LGD vs VP Supermajor 败者组决赛 BO3 第一场 6.10
2018/07/04 DOTA
python学习之编写查询ip程序
2016/02/27 Python
Python列表解析配合if else的方法
2018/06/23 Python
基于Python实现船舶的MMSI的获取(推荐)
2019/10/21 Python
Python基于字典实现switch case函数调用
2020/07/22 Python
python批量生成条形码的示例
2020/10/10 Python
python实现企业微信定时发送文本消息的示例代码
2020/11/24 Python
python 第三方库paramiko的常用方式
2021/02/20 Python
HTML5 Canvas锯齿图代码实例
2014/04/10 HTML / CSS
MYSQL相比于其他数据库有哪些特点
2013/07/19 面试题
财务管理个人自荐书范文
2013/11/24 职场文书
绿色学校实施方案
2014/03/31 职场文书
工厂门卫岗位职责范本
2014/04/04 职场文书
和谐社区口号
2014/06/19 职场文书
竞选班干部演讲稿600字
2014/08/20 职场文书
机关党员三严三实心得体会
2014/10/13 职场文书
师范生见习总结范文
2015/06/23 职场文书
Python编写冷笑话生成器
2022/04/20 Python