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 相关文章推荐
一个基于flask的web应用诞生(1)
Apr 11 Python
[原创]教女朋友学Python3(二)简单的输入输出及内置函数查看
Nov 30 Python
Python numpy 点数组去重的实例
Apr 18 Python
基于python if 判断选择结构的实例详解
May 06 Python
Python求两点之间的直线距离(2种实现方法)
Jul 07 Python
使用pygame写一个古诗词填空通关游戏
Dec 03 Python
Python hmac模块使用实例解析
Dec 24 Python
关于初始种子自动选取的区域生长实例(python+opencv)
Jan 16 Python
python自动脚本的pyautogui入门学习
Apr 01 Python
python 错误处理 assert详解
Apr 20 Python
python解压zip包中文乱码解决方法
Nov 27 Python
基于Python实现粒子滤波效果
Dec 01 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
linux下 C语言对 php 扩展
2008/12/14 PHP
什么情况下可以不写PHP的闭合标签“?&gt;”
2014/08/28 PHP
详解WordPress中提醒安装插件以及隐藏插件的功能实现
2015/12/25 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
PHP实现断点续传乱序合并文件的方法
2018/09/06 PHP
工作中常用到的JS表单验证代码(包括例子)
2010/11/11 Javascript
JAVASCRIPT车架号识别/验证函数代码 汽车车架号验证程序
2012/01/08 Javascript
JQuery分别取得每行最后一列和最后一行的示例代码
2013/08/18 Javascript
javascript 终止函数执行操作
2014/02/14 Javascript
自己用jQuery写了一个图片的马赛克消失效果
2014/05/04 Javascript
使用jquery修改表单的提交地址基本思路
2014/06/04 Javascript
jQuery+HTML5实现手机摇一摇换衣特效
2015/06/05 Javascript
canvas红包照片实例分享
2017/02/28 Javascript
Ionic2开发环境搭建教程
2020/08/20 Javascript
JS如何判断对象是否包含某个属性
2020/08/29 Javascript
[01:15:00]LGD vs Mineski Supermajor 胜者组 BO3 第一场 6.5
2018/06/06 DOTA
django启动uwsgi报错的解决方法
2018/04/08 Python
pytorch 使用单个GPU与多个GPU进行训练与测试的方法
2019/08/19 Python
Python 实现取多维数组第n维的前几位
2019/11/26 Python
你不知道的葡萄干处理法、橙蜜处理法、二氧化碳酵母法
2021/03/17 冲泡冲煮
纯css3无js实现的Android Logo(有简单动画)
2013/01/21 HTML / CSS
纽约州一群才华横溢的金匠制作而成:Hearth Jewelry
2019/03/22 全球购物
俄罗斯建筑和装饰材料在线商店:Stroilandia
2020/07/25 全球购物
介绍一下MD5加密算法
2016/11/12 面试题
写好求职信第一句话的技巧
2013/10/26 职场文书
万年牢教学反思
2014/02/15 职场文书
乡镇纠风工作实施方案
2014/03/22 职场文书
元旦联欢会主持词
2014/03/26 职场文书
大学应届毕业生求职信
2014/05/24 职场文书
文化产业实施方案
2014/06/07 职场文书
青年教师师德演讲稿
2014/08/26 职场文书
歌颂党的演讲稿
2014/09/10 职场文书
委托书的样本
2015/01/28 职场文书
2016年最美孝心少年事迹材料
2016/02/26 职场文书
2016年社区党支部公开承诺书
2016/03/25 职场文书
Python 线程池模块之多线程操作代码
2021/05/20 Python