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中的函数用法入门教程
Sep 02 Python
跟老齐学Python之Import 模块
Oct 13 Python
Python切片知识解析
Mar 06 Python
python实现可以断点续传和并发的ftp程序
Sep 13 Python
python实现Zabbix-API监控
Sep 17 Python
python获取url的返回信息方法
Dec 17 Python
使用Python制作表情包实现换脸功能
Jul 19 Python
pytorch自定义初始化权重的方法
Aug 17 Python
pygame实现五子棋游戏
Oct 29 Python
解决Python图形界面中设置尺寸的问题
Mar 05 Python
如何在Windows中安装多个python解释器
Jun 16 Python
SpringBoot首页设置解析(推荐)
Feb 11 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实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
2014/05/10 PHP
php编写的抽奖程序中奖概率算法
2015/05/14 PHP
PHP数据库编程之MySQL优化策略概述
2017/08/16 PHP
JQuery优缺点分析说明
2011/04/10 Javascript
优化innerHTML操作(提高代码执行效率)
2011/08/20 Javascript
jQuery的.live()和.die() 使用介绍
2011/09/10 Javascript
jquery移动listbox的值原理及代码
2013/05/03 Javascript
JavaScript bold方法入门实例(把指定文字显示为粗体)
2014/10/17 Javascript
js+html5绘制图片到canvas的方法
2015/06/05 Javascript
js实现带圆角的两级导航菜单效果代码
2015/08/24 Javascript
Bootstrap每天必学之警告框插件
2016/04/26 Javascript
JS函数的定义与调用方法推荐
2016/05/12 Javascript
轻松实现js选项卡切换效果
2016/09/24 Javascript
浅谈Angular中ngModel的$render
2016/10/24 Javascript
BootStrap tab选项卡使用小结
2020/08/09 Javascript
jQuery无缝轮播图代码
2016/12/22 Javascript
利用纯js + transition动画实现移动端web轮播图详解
2017/09/10 Javascript
Three.js利用dat.GUI如何简化试验流程详解
2017/09/26 Javascript
Vue列表渲染的示例代码
2018/11/01 Javascript
如何使用 vue + d3 画一棵树
2018/12/03 Javascript
动态内存分配导致影响Javascript性能的问题
2018/12/18 Javascript
[01:07:02]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第三场 2月26日
2021/03/11 DOTA
python中input()与raw_input()的区别分析
2016/02/27 Python
Python实现替换文件中指定内容的方法
2018/03/19 Python
pandas进行时间数据的转换和计算时间差并提取年月日
2019/07/06 Python
基于python实现ROC曲线绘制广场解析
2020/06/28 Python
Django返回HTML文件的实现方法
2020/09/17 Python
几款好用的python工具库(小结)
2020/10/20 Python
使用html5新特性轻松监听任何App自带返回键的示例
2018/03/13 HTML / CSS
美国精品地毯网站:Boutique Rugs
2020/03/04 全球购物
营销人才自我鉴定范文
2013/12/25 职场文书
退休感言
2014/01/28 职场文书
幼儿园师德演讲稿
2014/05/06 职场文书
开工典礼策划方案
2014/05/23 职场文书
2015年检验员工作总结范文
2015/04/30 职场文书
Pygame游戏开发之太空射击实战敌人精灵篇
2022/08/05 Python