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写的Tkinter程序屏幕居中方法
Mar 10 Python
Python之os操作方法(详解)
Jun 15 Python
python3.4.3下逐行读入txt文本并去重的方法
Apr 29 Python
Python 调用 zabbix api的方法示例
Jan 06 Python
使用selenium模拟登录解决滑块验证问题的实现
May 10 Python
python登录WeChat 实现自动回复实例详解
May 28 Python
python统计指定目录内文件的代码行数
Sep 19 Python
Pandas时间序列基础详解(转换,索引,切片)
Feb 26 Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
Apr 24 Python
Selenium webdriver添加cookie实现过程详解
Aug 12 Python
详解python内置模块urllib
Sep 09 Python
PyQt5结合matplotlib绘图的实现示例
Sep 15 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 define函数的使用说明
2008/08/27 PHP
thinkphp 多表 事务详解
2013/06/17 PHP
2014过年倒计时示例
2014/01/31 PHP
php实现图片上传时添加文字和图片水印技巧
2020/04/18 PHP
PHP使用PDO操作sqlite数据库应用案例
2019/03/07 PHP
可以将word转成html的js代码
2010/04/11 Javascript
js 获取(接收)地址栏参数值的方法
2013/04/01 Javascript
我用的一些Node.js开发工具、开发包、框架等总结
2014/09/25 Javascript
jquery判断复选框是否选中进行答题提示特效
2015/12/10 Javascript
node.js中实现kindEditor图片上传功能的方法教程
2017/04/26 Javascript
EasyUI在Panel上动态添加LinkButton按钮
2017/08/11 Javascript
express如何使用session与cookie的方法
2018/01/30 Javascript
vue实现tab切换外加样式切换方法
2018/03/16 Javascript
让webpack+vue-cil项目不再自动打开浏览器的方法
2018/09/27 Javascript
jQuery 判断元素是否存在然后按需加载内容的实现代码
2020/01/16 jQuery
Vue3为什么这么快
2020/09/23 Javascript
如何在vue-cli中使用css-loader实现css module
2021/01/07 Vue.js
[01:34]DOTA2 7.22版本新增神杖效果一览(敏捷英雄篇)
2019/05/28 DOTA
Python脚本实现代码行数统计代码分享
2015/03/10 Python
python爬虫_微信公众号推送信息爬取的实例
2017/10/23 Python
python2.7到3.x迁移指南
2018/02/01 Python
Django添加sitemap的方法示例
2018/08/06 Python
对pandas的行列名更改与数据选择详解
2018/11/12 Python
Python实现12306火车票抢票系统
2019/07/04 Python
Django用户认证系统如何实现自定义
2020/11/12 Python
用html5绘制折线图的实例代码
2016/03/25 HTML / CSS
中国专业的综合网上购物商城:京东
2016/08/02 全球购物
Europcar意大利:汽车租赁
2019/07/07 全球购物
乌克兰排名第一的在线旅游超市:Farvater.Travel
2020/01/02 全球购物
大学生毕业自我评价范文分享
2013/11/11 职场文书
家长评语大全
2014/01/22 职场文书
社区优秀志愿者材料
2014/02/02 职场文书
优秀共产党员先进事迹材料
2014/05/06 职场文书
遗愿清单观后感
2015/06/09 职场文书
五星红旗迎风飘扬观后感
2015/06/17 职场文书
运动会闭幕式通讯稿
2015/07/18 职场文书