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随机数random模块使用指南
Sep 09 Python
如何用itertools解决无序排列组合的问题
May 18 Python
python扫描proxy并获取可用代理ip的实例
Aug 07 Python
Python之Scrapy爬虫框架安装及使用详解
Nov 16 Python
python+django+sql学生信息管理后台开发
Jan 11 Python
Django的HttpRequest和HttpResponse对象详解
Jan 26 Python
Python+OpenCV图片局部区域像素值处理改进版详解
Jan 23 Python
通过shell+python实现企业微信预警
Mar 07 Python
PyQt5组件读取参数的实例
Jun 25 Python
阿里云ECS服务器部署django的方法
Aug 29 Python
详解Python中的format格式化函数的使用方法
Nov 20 Python
python单向循环链表原理与实现方法示例
Dec 03 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数组合并的二种方法
2014/03/21 PHP
php的mssql数据库连接类实例
2014/11/28 PHP
php准确获取文件MIME类型的方法
2015/06/17 PHP
thinkphp框架实现删除和批量删除
2016/06/29 PHP
PHP解耦的三重境界(浅谈服务容器)
2017/03/13 PHP
Yii2 queue的队列使用详解
2019/07/19 PHP
setTimeout与setInterval在不同浏览器下的差异
2010/01/24 Javascript
用JS判断IE版本的代码 超管用!
2011/08/09 Javascript
javaScript array(数组)使用字符串作为数组下标的方法
2013/11/19 Javascript
自定义函数实现IE7与IE8不兼容js中trim函数的问题
2015/02/03 Javascript
Bootstrap表单Form全面解析
2016/06/13 Javascript
Google 地图API资料整理及详细介绍
2016/08/06 Javascript
浅谈jquery之on()绑定事件和off()解除绑定事件
2016/10/26 Javascript
vue.js移动端tab组件的封装实践实例
2017/06/30 Javascript
完美解决axios跨域请求出错的问题
2018/02/05 Javascript
微信小程序实现指定显示行数多余文字去掉用省略号代替
2018/07/25 Javascript
微信小程序之数据绑定原理解析
2019/08/14 Javascript
JS实现表单中点击小眼睛显示隐藏密码框中的密码
2020/04/13 Javascript
详解使用mocha对webpack打包的项目进行&quot;冒烟测试&quot;的大致流程
2020/04/27 Javascript
Vue实现todo应用的示例
2021/02/20 Vue.js
对于Python中线程问题的简单讲解
2015/04/03 Python
Python的Flask框架中配置多个子域名的方法讲解
2016/06/07 Python
Python使用pydub库对mp3与wav格式进行互转的方法
2019/01/10 Python
Django CBV类的用法详解
2019/07/26 Python
如何使用python实现模拟鼠标点击
2020/01/06 Python
解决torch.autograd.backward中的参数问题
2020/01/07 Python
Python + selenium + crontab实现每日定时自动打卡功能
2020/03/31 Python
Python中有几个关键字
2020/06/04 Python
internal修饰符起什么作用
2013/12/16 面试题
商场中秋节广播稿
2014/01/17 职场文书
大专会计自我鉴定
2014/02/06 职场文书
2014迎新年晚会策划方案
2014/02/23 职场文书
揭牌仪式主持词
2014/03/19 职场文书
语文复习计划
2015/01/19 职场文书
一道JS算法面试题——冒泡、选择排序
2021/04/21 Javascript
Python Django项目和应用的创建详解
2021/11/27 Python