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中针对函数处理的特殊方法
Mar 06 Python
Python中解析JSON并同时进行自定义编码处理实例
Feb 08 Python
Python标准库06之子进程 (subprocess包) 详解
Dec 07 Python
Python基于正则表达式实现文件内容替换的方法
Aug 30 Python
深入理解Python中range和xrange的区别
Nov 26 Python
Python3使用turtle绘制超立方体图形示例
Jun 19 Python
python使用pygame框架实现推箱子游戏
Nov 20 Python
python实现求特征选择的信息增益
Dec 18 Python
Python下利用BeautifulSoup解析HTML的实现
Jan 17 Python
pycharm通过anaconda安装pyqt5的教程
Mar 24 Python
python属于解释型语言么
Jun 15 Python
解决python存数据库速度太慢的问题
Apr 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
php&amp;java(三)
2006/10/09 PHP
Apache2 httpd.conf 中文版
2006/12/06 PHP
PHP之变量、常量学习笔记
2008/03/27 PHP
php 字符串函数收集
2010/03/29 PHP
smarty自定义函数htmlcheckboxes用法实例
2015/01/22 PHP
thinkPHP多语言切换设置方法详解
2016/11/11 PHP
详解php中生成标准uuid(guid)的方法
2019/04/28 PHP
Yii2框架加载css和js文件的方法分析
2019/05/25 PHP
学习ExtJS(二) Button常用方法
2009/10/07 Javascript
addEventListener和attachEvent二者绑定的执行函数中的this不相同
2012/12/09 Javascript
如何实现修改密码时密码框显示保存到cookie的密码
2013/12/10 Javascript
详谈nodejs异步编程
2014/12/04 NodeJs
js与css实现弹出层覆盖整个页面的方法
2014/12/13 Javascript
Ionic实现页面下拉刷新(ion-refresher)功能代码
2016/06/03 Javascript
js删除数组元素、清空数组的简单方法(必看)
2016/07/27 Javascript
jquery配合.NET实现点击指定绑定数据并且能够一键下载
2016/10/28 Javascript
Nodejs之TCP服务端与客户端聊天程序详解
2017/07/07 NodeJs
js编写简单的计时器功能
2017/07/15 Javascript
Angular2的管道Pipe的使用方法
2017/11/07 Javascript
vue cli构建的项目中请求代理与项目打包问题
2018/02/26 Javascript
PostgreSQL Node.js实现函数计算方法示例
2019/02/12 Javascript
typescript配置alias的详细步骤
2020/08/12 Javascript
[04:10]DOTA2英雄梦之声_第11期_圣堂刺客
2014/06/21 DOTA
[01:33:07]VGJ.T vs Newbee Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
跟老齐学Python之dict()的操作方法
2014/09/24 Python
python遍历目录的方法小结
2016/04/28 Python
浅谈如何使用python抓取网页中的动态数据实现
2020/08/17 Python
皮尔·卡丹巴西官方商店:Pierre Cardin
2017/07/21 全球购物
介绍一下Python中webbrowser的用法
2013/05/07 面试题
社会治安综合治理管理责任书
2014/04/16 职场文书
工厂仓管员岗位职责范本
2014/07/17 职场文书
幼儿园感恩节活动方案2014
2014/10/11 职场文书
销售助理岗位职责
2015/02/11 职场文书
大学组织委员竞选稿
2015/11/21 职场文书
导游词书写之黄山
2019/08/06 职场文书
HTML 里 img 元素的 src 和 srcset 属性的区别详解
2023/05/21 HTML / CSS