|
本帖最后由 hxq2015 于 2023-5-5 13:13 编辑
再做一个合并版,可以对付大多数m3u8视频下载了,废了些时间在这些无用的事情上了。 窗口程序集名 | 保 留 | 保 留 | 备 注 | 窗口程序集_启动窗口 | | | | 变量名 | 类 型 | 数组 | 备 注 | 总下载数 | 整数型 | | 已下载数 | 整数型 | | 开始下载句柄 | 整数型 | | 下载目录 | 文本型 | | 线程池 | 线程池 | | 域名头 | 文本型 | | 域名中间 | 文本型 | | 域名尾 | 文本型 | | 下载流句柄 | 整数型 | | 浏览器目录 | 文本型 | | 文件名 | 文本型 | |
组合框1.现行选中项 = 0 拖放对象1. 注册拖放控件 (透明标签1. 取窗口句柄 ()) 如果真 (寻找文件 (取运行目录 () + “\ffempg11.exe”, ) = “”)写到文件 (取运行目录 () + “\视频工具.zip”, #ffempg11 )ZIP压缩1. 解压 (取运行目录 () + “\视频工具.zip”, 取运行目录 () + “\”)删除文件 (取运行目录 () + “\视频工具.zip”)如果真 (寻找文件 (取运行目录 () + “\IDMan.exe”, ) = “”)写到文件 (取运行目录 () + “\IDMan.exe”, #IDM )如果 (取反 (寻找文本 (编辑框1.内容, “\”, , 假) = -1 )) 信息框 (“格式不能含有/,请按转换键!”, 0, , )返回 ()如果 (编辑框1.内容 = “” 或 编辑框3.内容 = “”)信息框 (“请填入完整信息!”, 0, , )返回 ()如果真 (文本_寻找文本 (编辑框1.内容, “.mp4”, ) > 0 )调用IDM (编辑框1.内容, 取运行目录 (), 编辑框3.内容 ) 如果真 (文本_寻找文本 (编辑框1.内容, “.m3u8”, ) > 0 )线程池. 创建 (到整数 (编辑框4.内容 )) 按钮_下载.禁止 = 真 启动线程 (&开始下载, , 开始下载句柄 )|
调用IDM | | | |
url | 文本型 | | | | add | 文本型 | | | | filename | 文本型 | | | | 如果真 (取反 (是否为空 (filename )) )filename = “ /f ” + #引号 + filename + #引号 运行 (“IDMan.exe /p ” + #引号 + add + #引号 + filename + “ /d ” + #引号 + url + #引号 + “ /n” + “ /q”, 真, #隐藏窗口 )如果真 (文本_寻找文本 (编辑框1.内容, “m3u8”, ) ≠ -1 )线程池. 销毁 ()按钮_下载.禁止 = 假 进度条.位置 = 0 已下载数 = 0 标签5.标题 = “用户取消”变量名 | 类 型 | 静态 | 数组 | 备 注 | 数据列表 | 文本型 | | 0 | x | 整数型 | | | 行号 | 整数型 | | | a | 整数型 | | | 获取m3u8资源列表 (编辑框1.内容, 数据列表 )如果 (取数组成员数 (数据列表 ) = 0 )标签5.标题 = “视频提取失败”标签5.标题 = “视频提取成功”总下载数 = 取数组成员数 (数据列表 )计次循环首 (取数组成员数 (数据列表 ), x )线程池. 加入工作 (&线程下载子程序, 总下载数, 网页_取网址文件名 (数据列表 [x ]), 数据列表 [x ])计次循环尾 ()如果 (等待线程 (开始下载句柄, 1 )) 强制结束线程 (开始下载句柄 )关闭线程句柄 (开始下载句柄 )如果 (编辑框1.内容 = “”)信息框 (“没填播放源”, 0, , )CKplayer_播放 (编辑框1.内容 )临时文本 = #ckplayer 临时文本 = 子文本替换 (临时文本, “{video}”, 到文本 (视频地址 ), , , 真)临时文本 = 子文本替换 (临时文本, “&”, “%26”, , , 真)写到文件 (取运行目录 () + “\index.html”, 到字节集 (临时文本 )) 超文本浏览框1. 跳转 (取运行目录 () + “\index.html”, , )写到文件 (取运行目录 () + “/flash.exe”, #flash )运行 (取运行目录 () + “/flash.exe”, 假, )编辑框1.内容 = 子文本替换 (编辑框1.内容, “\/”, “/”, , , 真)编辑框1.内容 = 子文本替换 (编辑框1.内容, “\”, “/”, , , 真)|
线程下载子程序 | | | |
总数 | 整数型 | | | | 下载文件名 | 文本型 | | | | 下载地址 | 文本型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | 保存文件名 | 文本型 | | | 数据 | 字节集 | | | 下载进度 | 小数型 | | | 命令 | 文本型 | | |
下载目录 = 取运行目录 () + “\” + 编辑框3.内容 + “\”如果真 (取反 (目录_是否存在 (文件_取目录 (下载目录 )) )) 创建目录 (文件_取目录 (下载目录 )) 保存文件名 = 下载目录 + 下载文件名数据 = HTTP读文件 (下载地址 )写到文件 (保存文件名, 数据 )已下载数 = 已下载数 + 1 下载进度 = 到整数 (已下载数 ÷ 总数 × 100 )标签5.标题 = “已下载:” + 到文本 (下载进度 ) + “%”进度条.位置 = 下载进度 如果真 (已下载数 = 总数 )命令 = 系统_取DOS执行结果 (“ffmpeg11.exe -allowed_extensions ALL -i ” + 下载目录 + 编辑框3.内容 + “.m3u8 -c copy ” + 取运行目录 () + “\” + 编辑框3.内容 + “.mp4”)如果 (文件是否存在 (取运行目录 () + “\” + 编辑框3.内容 + “.mp4”) = 假)标签5.标题 = “合并文件失败”标签5.标题 = “正在删除临时文件”删除目录 (下载目录 )标签5.标题 = “下载完成”按钮_下载.禁止 = 假 进度条.位置 = 0 已下载数 = 0 线程池. 销毁 ()CKplayer_播放 (子文本替换 (接收到的文件路径, “\”, “/”, , , 真)) CKplayer_播放 (“ ”)结束 ()|
获取m3u8资源列表 | | | |
m3u8地址 | 文本型 | | | | 返回资源列表 | 文本型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | 域名 | 文本型 | | | 域名2 | 文本型 | | | m3u8文件名 | 文本型 | | | 临时数据 | 文本型 | | | ts列表 | 文本型 | | 0 | 地址 | 文本型 | | | 地址名 | 文本型 | | | x | 整数型 | | | m3u8新文件名 | 文本型 | | | 分析原地址 | 文本型 | | | 原地址中间 | 文本型 | | | xm3u8 | 文本型 | | | key替换 | 文本型 | | | 下载句柄 | 整数型 | | | key文件 | 文本型 | | | m3u8句柄 | 整数型 | | |
下载目录 = 取运行目录 () + “\” + 编辑框3.内容 + “\”如果真 (取反 (目录_是否存在 (文件_取目录 (下载目录 )) )) 创建目录 (文件_取目录 (下载目录 )) 域名 = 文本_取左边 (m3u8地址, “/”) + “//” + 网页_取域名 (m3u8地址, ) + “/” m3u8文件名 = 网页_取网址文件名 (m3u8地址 ) 原地址中间 = 文本_取出中间文本 (m3u8地址, 域名, m3u8文件名 ) 分析原地址 = 到文本 (HTTP读文件 (m3u8地址 )) 如果 (分析原地址 = “”)信息框 (“m3u8地址无效,请输入其他地址”, 0, , )返回 ()m3u8新文件名 = 文本_取右边 (分析原地址, 原地址中间) 如果 (文本_寻找文本 (分析原地址, “BANDWIDTH=”, , 真) ≠ -1 )m3u8地址 = 子文本替换 (m3u8地址, m3u8文件名, m3u8新文件名, , , 真) 域名2 = 子文本替换 (m3u8地址, m3u8文件名, “”, , , 真) 临时数据 = 编码_utf8到gb2312 (网页_取网页源码 (m3u8地址 )) 如果真 (文本_寻找文本 (临时数据, “key.key”, , 真) ≠ -1 ) 标签5.标题 = “正在写出解密文件”key文件 = 子文本替换 (m3u8地址, m3u8文件名, “key.key”, , , 真) 写到文件 (下载目录 + “key.key”, HTTP读文件 (key文件 )) 域名2 = 域名 临时数据 = 编码_utf8到gb2312 (分析原地址 )如果真 (文本_寻找文本 (临时数据, “key.key”, , 真) ≠ -1 ) 标签5.标题 = “正在写出解密文件”key文件 = 子文本替换 (m3u8地址, m3u8文件名, “key.key”, , , 真) 写到文件 (下载目录 + “key.key”, HTTP读文件 (key文件 )) key替换 = 文本_取出中间文本 (临时数据, #引号, #引号 )如果 (文本_寻找文本 (临时数据, 原地址中间, , 真) ≠ -1 )域名2 = 文本_取左边 (域名2, “/” + 原地址中间 )域名2 = 子文本替换 (m3u8地址, m3u8文件名, “”, , , 真)下载句柄 = 打开内存文件 ()移到文件首 (下载句柄 )m3u8句柄 = 打开内存文件 ()移到文件首 (m3u8句柄 ) 如果 (文本_寻找文本 (临时数据, 字符 (10 ), , 真) = -1 ) ts列表 = 分割文本 (临时数据, #换行符, )ts列表 = 分割文本 (临时数据, 字符 (10 ), )如果 (取数组成员数 (ts列表 ) ≠ 0 )计次循环首 (取数组成员数 (ts列表 ), x )地址 = ts列表 [x ]如果 (文本_寻找文本 (地址, “#”, , 真) = -1 )如果 (文本_寻找文本 (地址, “http”, , 真) = -1 )加入成员 (返回资源列表, 域名2 + 地址 ) 加入成员 (返回资源列表, 地址 ) 地址名 = 取文本右边 (地址, 取文本长度 (地址) - 倒找文本 (地址, “/”, , 假))写出文本 (m3u8句柄, 子文本替换 (下载目录, “\”, “/”, , , 真) + 地址名, #换行符 )写出文本 (m3u8句柄, 地址, #换行符 )处理事件 ()计次循环尾 ()信息框 (“源可能失效”, 0, , ) 移到文件首 (m3u8句柄 )xm3u8 = 子文本替换 (读入文本 (m3u8句柄, ), key替换, 子文本替换 (下载目录, “\”, “/”, , , 真) + “key.key”, , , 真) 写到文件 (下载目录 + 编辑框3.内容 + “.m3u8”, 到字节集 (xm3u8 )) 变量名 | 类 型 | 静态 | 数组 | 备 注 | 行内容 | 文本型 | | | 网源码 | 文本型 | | |
网源码 = 到文本 (HTTP读文件 (网页地址框.内容 )) 如果 (文本_寻找文本 (网源码, 组合框1. 取项目文本 (组合框1.现行选中项 ), , 假) = -1 )信息框 (“没找到指定文件,请换网址再次搜寻”, 0, , )返回 ()行内容 = 文本_取指定变量文本行 (网源码, 文本_取文本所在行_优化版 (网源码, 组合框1. 取项目文本 (组合框1.现行选中项 ), , 假)) 编辑框3.内容 = 文本区分_只取汉字 (编码_utf8到gb2312 (文本_取出中间文本 (网源码, “”, , )) )如果真 (组合框1. 取项目文本 (组合框1.现行选中项 ) = “.m3u8”)编辑框1.内容 = “http” + 文本_倒取出中间文本 (行内容, “.m3u8”, “http”, , 假) + “.m3u8”如果真 (组合框1. 取项目文本 (组合框1.现行选中项 ) = “.mp4”)编辑框1.内容 = “http” + 文本_倒取出中间文本 (行内容, “.mp4”, “http”, , 假) + “.mp4”变量名 | 类 型 | 静态 | 数组 | 备 注 | 清晰度 | 文本型 | | 0 | 取清晰度 | 整数型 | | |
组合框2. 清空 ()取清晰度 = 文本_取中间_批量 (到文本 (HTTP读文件 (编辑框1.内容 )), “NAME=” + #引号, #引号, 清晰度, )如果 (文本_寻找文本 (到文本 (HTTP读文件 (编辑框1.内容 )), “NAME=”, , ) > 1 )组合框2. 加入项目 (“有数据,可选择”, )计次循环首 (取数组成员数 (清晰度 ), 取清晰度 )组合框2. 加入项目 (清晰度 [取清晰度 ], )计次循环尾 ()组合框2.现行选中项 = 0 组合框2. 加入项目 (“无数据,无需选择”, )组合框2.现行选中项 = 0 替换名 = 文本_取出中间文本 (到文本 (HTTP读文件 (编辑框1.内容 )), 组合框2. 取项目文本 (组合框2.现行选中项 ) + #引号, “.m3u8”, , ) + “.m3u8”编辑框1.内容 = 子文本替换 (编辑框1.内容, 网页_取网址文件名 (编辑框1.内容 ), 替换名, , , 真)执行 (, 取运行目录 (), , , )如果 (编辑框1.内容 ≠ “” 且 编辑框3.内容 ≠ “”)如果 (文件是否存在 (取运行目录 () + “\” + 编辑框3.内容 + “.mp4”) = 假)执行 (4, 编辑框1.内容, , , )标签5.标题 = “读取中,请稍候”时钟2.时钟周期 = 1000 信息框 (“已存在同名文件”, 0, , )返回 ()信息框 (“请检查,有信息没填”, 0, , )返回 ()变量名 | 类 型 | 静态 | 数组 | 备 注 | 取新后辍 | 文本型 | | | 一次文本 | 文本型 | | | 新后辍 | 文本型 | | |
一次文本 = 到文本 (读入文件 (浏览器目录 + “index.txt”)) 如果真 (文本_寻找文本 (一次文本, “BANDWIDTH=”, , 假) > 0 )取新后辍 = 到文本 (到整数 (文本_取出中间文本 (一次文本, “BANDWIDTH=”, “,”)) \ 1000 ) + “kb”新后辍 = 取新后辍 + 文本_取右边 (一次文本, 取新后辍 )编辑框1.内容 = 子文本替换 (编辑框1.内容, “index.m3u8”, 新后辍, , , 真)标签5.标题 = “正在取地址”执行 (4, 编辑框1.内容, , , )删除文件 (浏览器目录 + “index.txt”)时钟3.时钟周期 = 1000 变量名 | 类 型 | 静态 | 数组 | 备 注 | 列表组 | 文本型 | | 0 | n | 整数型 | | | 二次文本 | 文本型 | | | 地址 | 文本型 | | | 下载句柄 | 整数型 | | | m3u8句柄 | 整数型 | | | 地址名 | 文本型 | | | 表项 | 整数型 | | | D | 整数型 | | | key文件 | 文本型 | | | xm3u8 | 文本型 | | |
标签5.标题 = “下载中”m3u8句柄 = 打开内存文件 ()二次文本 = 到文本 (读入文件 (浏览器目录 + “index.txt”)) 域名尾 = 取文本右边 (编辑框1.内容, 取文本长度 (编辑框1.内容 ) - 倒找文本 (编辑框1.内容, “/”, , 假)) 域名头 = 文本_取左边 (编辑框1.内容, “.com”) + “.com”域名中间 = 文本_取出中间文本 (编辑框1.内容, 域名头, 域名尾 )如果真 (文本_寻找文本 (二次文本, “key.key”, , 真) ≠ -1 )key文件 = 文本_取出中间文本 (二次文本, #引号, #引号 )如果 (文本_寻找文本 (key文件, “http”, , 真) = -1 )执行 (4, 域名头 + 域名中间 + “/” + key文件, , , )执行 (4, key文件, , , )列表组 = 分割文本 (二次文本, 字符 (10 ), )如果真 (取数组成员数 (列表组 ) ≠ 0 )计次循环首 (取数组成员数 (列表组 ), n )如果 (文本_寻找文本 (列表组 [n ], “#”, , 真) = -1 )如果 (文本_寻找文本 (列表组 [n ], “http”, , 真) = -1 )如果 (文本_寻找文本 (列表组 [n ], “kb”, , 真) = -1 )地址 = 域名头 + 域名中间 + 列表组 [n ]地址 = 域名头 + 列表组 [n ]地址 = 列表组 [n ]地址名 = 取文本右边 (地址, 取文本长度 (地址) - 倒找文本 (地址, “/”, , 假))写出文本 (m3u8句柄, 子文本替换 (浏览器目录, “\”, “/”, , , 真) + 地址名, #换行符 )表项 = 超级列表框1. 插入表项 (, , , , , )超级列表框1. 置标题 (表项, 0, 到文本 (超级列表框1. 取表项数 ()) )超级列表框1. 置标题 (表项, 1, 地址 )超级列表框1. 置标题 (表项, 2, 地址名 )超级列表框1. 置标题 (表项, 3, “等待中”)写出文本 (m3u8句柄, 列表组 [n ], #换行符 )处理事件 ()计次循环尾 ()移到文件首 (m3u8句柄 )xm3u8 = 子文本替换 (读入文本 (m3u8句柄, ), key文件, 子文本替换 (浏览器目录 + “key.key”, “\”, “/”, , , 真), , , 真)写到文件 (浏览器目录 + 编辑框3.内容 + “.m3u8”, 到字节集 (xm3u8 )) 删除文件 (浏览器目录 + “index.txt”)如果真 (超级列表框1. 取表项数 () > 0 )计次循环首 (超级列表框1. 取表项数 (), D )执行 (4, 超级列表框1. 取标题 (D - 1, 1 ), , , )时钟1.时钟周期 = 1000 计次循环尾 ()标签5.标题 = “合并中”系统_取DOS执行结果 (“ffmpeg11.exe -allowed_extensions ALL -i ” + 浏览器目录 + 编辑框3.内容 + “.m3u8 -c copy ” + 取运行目录 () + “\” + 编辑框3.内容 + “.mp4”)如果 (文件是否存在 (取运行目录 () + “\” + 编辑框3.内容 + “.mp4”) = 假)标签5.标题 = “合并文件失败”标签5.标题 = “正在删除临时文件”目录_清空 (浏览器目录 )标签5.标题 = “下载完成”超级列表框1. 全部删除 ()按钮5.禁止 = 假 如果真 (超级列表框1. 取表项数 () > 0 )计次循环首 (超级列表框1. 取表项数 (), U )如果真 (寻找文件 (浏览器目录 + 超级列表框1. 取标题 (U - 1, 2 ), ) ≠ “”)超级列表框1. 置标题 (U - 1, 3, “完成”)完成数 = 完成数 + 1 计次循环尾 ()进度条.位置 = 到整数 (完成数 ÷ (U - 1 ) × 100 )标签5.标题 = “已下载:” + 到文本 (进度条.位置 ) + “%”如果真 (寻找文件 (浏览器目录 + “index.m3u8”, ) ≠ “”)标签5.标题 = “文件已读取,可以取地址了”文件名 = 寻找文件 (浏览器目录 + “*.m3u8”, )如果真 (文件名 ≠ “”)标签5.标题 = “地址已取到,可以下载”如果真 (标签5.标题 = “文件已读取,可以取地址了”)时钟2.时钟周期 = 0 文件更名 (浏览器目录 + “index.m3u8”, 浏览器目录 + “index.txt”)如果真 (寻找文件 (浏览器目录 + “index.txt”, ) ≠ “”)取地址 ()如果真 (标签5.标题 = “地址已取到,可以下载”)时钟3.时钟周期 = 0 如果真 (文件更名 (浏览器目录 + 文件名, 浏览器目录 + “index.txt”)) 启动线程 (&下载流, , 下载流句柄 )如果真 (标签5.标题 = “已下载:100%”)时钟1.时钟周期 = 0 合并文件 ()弹出菜单 (单项下载, , )执行 (4, 超级列表框1. 取标题 (超级列表框1.现行选中项, 1 ), , , )按钮5.禁止 = 真 如果 (目录_是否存在 (“C:\Users\” + 系统_取用户名 () + “\Downloads\”) = 真)浏览器目录 = “C:\Users\” + 系统_取用户名 () + “\Downloads\”浏览器目录 = “C:\Users\” + 系统_取用户名 () + “.” + 系统_取本机名 () + “\Downloads\”标签5.标题 = “正在清空浏览器下载目录”目录_清空 (浏览器目录 )时钟4.时钟周期 = 2000 如果真 (标签1.标题 = “下载完成”)时钟4.时钟周期 = 0 浏览器下载 ()|
edroptarget | eCompress | EThread | HtmlView | internet | shell | iext |
|
|