{"id":13439601,"url":"https://github.com/orestonce/m3u8d","last_synced_at":"2025-05-15T05:07:25.003Z","repository":{"id":37315624,"uuid":"492357995","full_name":"orestonce/m3u8d","owner":"orestonce","description":"m3u8视频下载工具, 提供windows/macos图形界面, 下载后自动将ts文件合并、转换格式为mp4","archived":false,"fork":false,"pushed_at":"2024-10-22T00:10:37.000Z","size":62378,"stargazers_count":837,"open_issues_count":14,"forks_count":108,"subscribers_count":10,"default_branch":"main","last_synced_at":"2025-04-14T08:11:30.373Z","etag":null,"topics":["downloader","m3u8","mp4","video-downloader"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/orestonce.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-05-15T01:06:23.000Z","updated_at":"2025-04-14T05:27:56.000Z","dependencies_parsed_at":"2024-04-11T11:26:56.828Z","dependency_job_id":"40e0e1d6-3a75-438e-9586-53debd12e2b3","html_url":"https://github.com/orestonce/m3u8d","commit_stats":null,"previous_names":[],"tags_count":86,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orestonce%2Fm3u8d","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orestonce%2Fm3u8d/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orestonce%2Fm3u8d/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orestonce%2Fm3u8d/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/orestonce","download_url":"https://codeload.github.com/orestonce/m3u8d/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254276447,"owners_count":22043867,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["downloader","m3u8","mp4","video-downloader"],"created_at":"2024-07-31T03:01:15.468Z","updated_at":"2025-05-15T05:07:19.994Z","avatar_url":"https://github.com/orestonce.png","language":"Go","funding_links":[],"categories":["Go","HarmonyOS"],"sub_categories":["Windows Manager"],"readme":"\n## m3u8视频下载工具\n* 没有ffmpeg依赖, 不需要单独配置任何环境\n* 提供windows图形界面(Qt), mac、linux命令行, linux支持arm、386、mipsle \n* 程序会自动将下载的ts文件合并转换格式为mp4\n* ![](m3u8d-qt/screenshot.png)\n* [全部版本下载](https://github.com/orestonce/m3u8d/releases ), 包括windows图形界面/linux命令行/mac命令行/mac图形化界面   \n* 命令行使用教程\n  * 普通下载命令: `./m3u8d download -u https://example.com/index.m3u8`\n  * curl模式： `./m3u8d curl 'https://example.com/index.m3u8' -H 'cookie: CONSENT=YES'`\n  * 合并某个目录下的ts文件为 mp4: `./m3u8d merge --InputTsDir /root/save --OutputMp4Name save.mp4` \n## 实现说明\n* download.go 大部分抄自 [llychao/m3u8-downloader](https://github.com/llychao/m3u8-downloader)\n* 使用[gomedia](https://github.com/yapingcat/gomedia) 代替ffmpeg进行格式转换\n* 支持跳过ts文件\n* 程序会在下载保存目录创建:\n    * downloading/ 目录, 用于存放正在下载的分段ts视频, 按照m3u8的url进行划分\n    * m3u8d_config.json 文件, 用于存放Qt ui的的界面上的配置信息, 只有Windows/Macos的Qt版本会创建此文件\n* **curl模式** 可以赋予使用者任意设置下载请求的Header信息的能力，方便解决只有一个m3u8的链接时无法下载视频的尴尬局面\n  * 例子1, 你需要下载的视频是要登陆后观看的，Cookie信息里存放了登陆状态\n  * 例子2, 网站开发者验证了Referer信息、Authority信息、Origin信息、User-Agent信息、各种特定的Header信息\n  * 以windows下的chrome为例，找到对应的m3u8请求记录，然后右键选择 \"Copy - Copy as cURL(bash)\", \n    然后打开 windows-qt版本的 m3u8d, 点击 \"curl 模式\"，将复制出来的请求粘贴上去即可\n* 已有功能列表\n  * 如果不是m3u8样子的URL，自动下载html下来、搜索其中的m3u8链接进行下载\n  * 支持下载aes加密的m3u8, 支持单个m3u8文件内不同ts文件使用不同的加密策略\n  * 内部使用多线程下载ts文件\n  * windows、linux、mac都支持转换、合并ts格式为mp4\n  * 充分测试后，使用 [gomedia](https://github.com/yapingcat/gomedia) 代替ffmpeg进行格式转换\n  * 增加openwrt路由器的mipsle二进制\n  * 支持从curl命令解析出需要的信息，正如 [cxjava/m3u8-downloader](https://github.com/cxjava/m3u8-downloader) 一样\n  * 显示下载速度、合并ts的速度\n  * 提供macos的图形化界面\n  * 支持嵌套m3u8的url\n  * ts文件合并优化\n    * ts文件列表中的媒体文件可能分辨率、fps不一致，例如第一个文件分辨率为1920x1080, 第二个文件为800x600，直接合并第一第二个文件则会造成合并的mp4无法播放\n    * 目前的处理方案是，分析需要合并的ts文件中的第一个文件的分辨率、fps，若后续的ts文件的分辨率、fps与第一个不同则不合并后续的ts文件\n  * 支持设置代理: http/socks5\n    * http代理解释: 要访问的真实url是http协议, 使用代理服务器可见的GET/POST/HEAD...形式; 如果要访问的真实url是https协议, 使用代理服务器不可见的CONNECT形式\n  * 跳过ts的表达式使用英文逗号','隔开, 编写规则:\n    * ts列表文件名从1开始编号，例如第一个ts文件的编号就是1，第十个ts的编号就是10\n    * 想要跳过编号为10的ts: 10\n    * 想要跳过编号为23到199的ts: 23-199\n    * 想要跳过下载ts时，服务器返回http状态码为403,404的ts: http.code=403, http.code=404\n    * 使用服务器的http状态码跳过ts可能造成判断错误，所以默认情况不会合并下载的ts、不会删除下载的ts。 \n      * 如果要让http状态码跳过的ts也能被自动合并: if-http.code-merge_ts\n    \n## TODO:\n  * [ ] 多线程修改为自适应模式，在下载过程中动态调整线程池大小，以便达到最快的下载速度\n  * [ ] 支持多国语言\n  * [ ] 支持从一个txt里读取下载列表，批量下载\n## 二次开发操作手册:\n* 如果只开发命令行版本, 则只需要修改*.go文件, 然后编译 cmd/main.go 即可\n* 如果涉及到Qt界面打包, 则需要运行 export/main.go 将 *.go导出为Qt界面需要的\n`m3u8-qt/m3u8.h`,`m3u8-qt/m3u8.cpp`, `m3u8-qt/m3u8-impl.a`. 然后使用QtCreator进行打包\n## 发布协议\n* m3u8d-qt/ 目录采用 [GPL协议 v3](m3u8d-qt/LICENSE) 发布\n* 除 m3u8d-qt/ 以外的代码, 采用[MIT协议](LICENSE)发布 \n## 开发支持\n * 本项目由 jetbrains 开源开发许可证-社区版([Licenses for Open Source Development](https://jb.gg/OpenSourceSupport)) 提供goland开发支持\n * 感谢 [gomedia](https://github.com/yapingcat/gomedia) 开发者提供的ts转mp4逻辑\n * 感谢 [cobra](https://github.com/spf13/cobra) 提供的命令行解析支持\n * 感谢 [setft](https://github.com/xiaoqidun/setft) 开发者提供的更新文件创建时间的逻辑\n \n----------------------------------\n## 关于为什么使用 gomedia 替代 ffmpeg\n### 引入ffmpeg很麻烦, 原因列表:\n1. ffmpeg开源协议是 GPL的,具有传染性, 这个项目的主要逻辑就不能使用 MIT 开源了\n2. 如果使用cgo调用的形式引入ffmpeg\n    * 最终二进制体积特别大\n    * 编译mac/linux/路由器 版本的时候必然要依赖对应的跨平台编译器, 编译难度提升\n3. 如果使用内嵌 静态编译的ffmpeg二进制, 使用的时候释放到 临时目录再调用命令行\n    * 最终二进制体积会更大, 可以看[以前的v1.1版本](https://github.com/orestonce/m3u8d/releases/tag/v1.1) , 每个最终二进制都比现在大25MB左右\n    * 没找到mipsle路由器版本的静态编译的ffmpeg\n4. 如果直接调用ffmpeg命令, 用户则必须首先安装ffmpeg到操作系统, 难用\n### 引入MIT协议的gomedia解决ts转换成mp4好处\n1. gomedia是纯go代码, 跨平台编译容易\n2. 本项目也可以使用MIT协议进行开源, 无需限定为GPL/LGPL\n3. 最终二进制体积特别小, linux/mac 版本的命令行版本才 5-7MB, windows由于有静态编译进来的qt界面, 现在体积有26MB\n4. 用户无需预先安装ffmpeg, 降低用户的使用难度\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Forestonce%2Fm3u8d","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Forestonce%2Fm3u8d","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Forestonce%2Fm3u8d/lists"}