diff --git a/README.md b/README.md index 64991de..2a9f75b 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,7 @@ * 自动跳过已下载 * 支持指定下载作品数量 * 多线程下载 +* 支持多链接下载 ![](img/tiktokcommand1.jpg) ![](img/tiktokcommand2.jpg) @@ -86,7 +87,27 @@ python TikTokWeb.py -p 5001 ## 抖音批量下载工具 -windows用户下载 Releases 中的 [TikTokCommand.exe](https://github.com/imgyh/tiktok/releases) 文件在cmd中运行 +批量下载有两种方式运行, 配置文件和命令行 + +默认使用配置文件方式 + +- link支持的地址格式, 形如 + +``` +抖音app分享链接: +1. 作品(视频或图集)、直播、合集、音乐集合、个人主页 https://v.douyin.com/BugmVVD/ +抖音网页版浏览器URL: +2. 单个视频 https://www.douyin.com/video/6915675899241450760 +3. 单个图集 https://www.douyin.com/note/7014363562642623777 +4. 用户主页 https://www.douyin.com/user/MS4wLjABAAAA06y3Ctu8QmuefqvUSU7vr0c_ZQnCqB0eaglgkelLTek +5. 单个合集 https://www.douyin.com/collection/7208829743762769975 +6. 音乐(原声)下的视频 https://www.douyin.com/music/7149936801028131598 +7. 直播 https://live.douyin.com/759547612580 +``` + +### 安装依赖 + +windows用户下载 Releases 中的 [TikTokCommand.exe](https://github.com/imgyh/tiktok/releases) 文件运行 windows用户本地有`python3.9`环境, 也可按照linux与mac用户的方式运行 linux与mac用户下载本项目, 在本地`python3.9`环境中运行, 首先需要安装依赖, 安装命令 @@ -96,7 +117,102 @@ cd /path/to/tiktok python -m pip install -r requirements.txt ``` -运行示例: +### 配置文件方式 + +配置文件名必须叫 `config.yml`, 并将其放在TikTokCommand.py或者TikTokCommand.exe同一个目录下 + +直接运行TikTokCommand.py或者TikTokCommand.exe, 无需在命令中加入任何参数, 所有参数都从配置文件中读取 + +基本配置示例如下, 请自己登录网页版抖音后F12获取cookie + +```yaml +####################################### +# 说明: +# 1. 井号(#)为注释 +# 2. 缩进严格对齐,使用空格缩进, 注意有些冒号后面有一个空格, 有些没有空格 +# 3. 请使用英文字符 +# 4. 更多yaml语法请上网查看 +####################################### + + +# 作品(视频或图集)、直播、合集、音乐集合、个人主页的分享链接或者电脑浏览器网址 +# (删除文案, 保证只有URL, https://v.douyin.com/kcvMpuN/ 或者 https://www.douyin.com/开头的) +# 可以设置多个链接, 确保至少一个链接 +# 必选 +link: + - https://live.douyin.com/759547612580 + - https://v.douyin.com/BugmVVD/ + - https://v.douyin.com/BugrFTN/ + - https://v.douyin.com/B72pdU5/ + - https://v.douyin.com/B72QgDw/ + - https://v.douyin.com/AJp8D3f/ + - https://v.douyin.com/B38oovu/ + - https://v.douyin.com/S6YMNXs/ + +# 下载保存位置, 默认当前文件位置 +# 必选 +path: /mnt/c/project/test333 + +# 是否下载视频中的音乐(True/False), 默认为True +# 可选 +music: True + +# 是否下载视频的封面(True/False), 默认为True, 当下载视频时有效 +# 可选 +cover: True + +# 是否下载作者的头像(True/False), 默认为True +# 可选 +avatar: True + +# 是否保存获取到的数据(True/False), 默认为True +# 可选 +json: True + +# link是个人主页时, 设置下载发布的作品(post)或喜欢的作品(like)或者用户所有合集(mix), 默认为post, 可以设置多种模式 +# 可选 +mode: + - post + - like + - mix + +# 下载作品个数设置 +# 可选 +number: + post: 5 # 主页下作品下载个数设置, 默认为0 全部下载 + like: 5 # 主页下喜欢下载个数设置, 默认为0 全部下载 + allmix: 1 # 主页下合集下载个数设置, 默认为0 全部下载 + mix: 5 # 单个合集下作品下载个数设置, 默认为0 全部下载 + music: 5 # 音乐(原声)下作品下载个数设置, 默认为0 全部下载 + +# 设置线程数, 默认5个线程 +# 可选 +thread: 5 + +# cookie 请登录网页抖音后F12查看 +# cookies 和 cookie 二选一, 要使用这种形式, 请注释下面的cookie +# 目前只需要msToken、ttwid、odin_tt、passport_csrf_token、sid_guard +# 可以动态添加, 程序会根据填的键查找,并没有写死, 如果抖音需要更多的cookie自己加上就行了 +cookies: + msToken: xxx + ttwid: xxx + odin_tt: xxx + passport_csrf_token: xxx + sid_guard: xxx + +# cookie 请登录网页抖音后F12查看 +# cookies 和 cookie 二选一, 要使用这种形式, 请注释上面的cookies及包含的所有键值对 +# 设置了这个后上面的cookies选项自动失效, 这个优先级更高 +# 格式: "name1=value1; name2=value2;" 注意要加冒号 +# 冒号中的内容包括不限于以下键值对, 如果抖音需要更多的cookie自己加上就行了 +#cookie: "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" + + +``` + +### 命令行方式 + +运行示例: - 获取帮助信息 @@ -111,146 +227,198 @@ python TikTokCommand.py -h ``` -h, --help 展示帮助页 ---link LINK, -l LINK 作品(视频或图集)、直播、合集、音乐集合、个人主页抖音分享链接(删除文案, 保证只有URL, https://v.douyin.com/kcvMpuN/) ---path PATH, -p PATH 下载保存位置 +--cmd CMD, -C CMD 使用命令行(True)或者配置文件(False), 默认为False +--link LINK, -l LINK 作品(视频或图集)、直播、合集、音乐集合、个人主页的分享链接或者电脑浏览器网址, 可以设置多个链接 + (删除文案, 保证只有URL, https://v.douyin.com/kcvMpuN/ 或者 https://www.douyin.com/开头的) +--path PATH, -p PATH 下载保存位置, 默认当前文件位置 --music MUSIC, -m MUSIC 是否下载视频中的音乐(True/False), 默认为True --cover COVER, -c COVER 是否下载视频的封面(True/False), 默认为True, 当下载视频时有效 --avatar AVATAR, -a AVATAR 是否下载作者的头像(True/False), 默认为True --json JSON, -j JSON 是否保存获取到的数据(True/False), 默认为True ---mode MODE, -M MODE link是个人主页时, 设置下载发布的作品(post)或喜欢的作品(like)或者用户所有合集(mix), 默认为post ---number NUMBER, -n NUMBER 1.当下载单个合集、音乐集合、主页作品(post模式)和喜欢(like模式)时, 可设置下载前n个作品, 默认为0全部下载 - 2.当下载主页下所有合集(mix模式)时, 设置下载前n个合集下所有作品, 默认为0全部下载 +--mode MODE, -M MODE link是个人主页时, 设置下载发布的作品(post)或喜欢的作品(like)或者用户所有合集(mix), 默认为post, 可以设置多种模式 +--postnumber POSTNUMBER 主页下作品下载个数设置, 默认为0 全部下载 +--likenumber LIKENUMBER 主页下喜欢下载个数设置, 默认为0 全部下载 +--allmixnumber ALLMIXNUMBER 主页下合集下载个数设置, 默认为0 全部下载 +--mixnumber MIXNUMBER 单个合集下作品下载个数设置, 默认为0 全部下载 +--musicnumber MUSICNUMBER 音乐(原声)下作品下载个数设置, 默认为0 全部下载 --thread THREAD, -t THREAD 设置线程数, 默认5个线程 +--cookie COOKIE 设置cookie, 格式: "name1=value1; name2=value2;" 注意要加冒号 +``` + +- 多链接多模式混合下载, 可以传入多个链接和多个模式(post、like、mix) + +``` +windows用户: +.\TikTokCommand.exe -C True \ + -l https://live.douyin.com/759547612580 \ + -l https://v.douyin.com/BugmVVD/ \ + -l https://v.douyin.com/BugrFTN/ \ + -l https://v.douyin.com/B72pdU5/ \ + -l https://v.douyin.com/B72QgDw/ \ + -l https://v.douyin.com/AJp8D3f/ \ + -l https://v.douyin.com/B38oovu/ \ + -l https://v.douyin.com/S6YMNXs/ \ + -p /path/to/downdir \ + -M post \ + -M like \ + -M mix \ + --postnumber 5 \ + --likenumber 5 \ + --allmixnumber 1 \ + --mixnumber 5 \ + --musicnumber 5 \ + --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" + +linux与mac用户: +python TikTokCommand.py -C True \ + -l https://live.douyin.com/759547612580 \ + -l https://v.douyin.com/BugmVVD/ \ + -l https://v.douyin.com/BugrFTN/ \ + -l https://v.douyin.com/B72pdU5/ \ + -l https://v.douyin.com/B72QgDw/ \ + -l https://v.douyin.com/AJp8D3f/ \ + -l https://v.douyin.com/B38oovu/ \ + -l https://v.douyin.com/S6YMNXs/ \ + -p C:\project\test \ + -M post \ + -M like \ + -M mix \ + --postnumber 5 \ + --likenumber 5 \ + --allmixnumber 1 \ + --mixnumber 5 \ + --musicnumber 5 \ + --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" ``` - 下载单个作品 ``` windows用户: -.\TikTokCommand.exe -l https://v.douyin.com/kcvMpuN/ -p C:\project\test +.\TikTokCommand.exe -C True -l https://v.douyin.com/kcvMpuN/ -p C:\project\test --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" linux与mac用户: -python TikTokCommand.py -l https://v.douyin.com/kcvMpuN/ -p /path/to/downdir +python TikTokCommand.py -C True -l https://v.douyin.com/kcvMpuN/ -p /path/to/downdir --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" ``` - 下载主页全部作品 ``` windows用户: -.\TikTokCommand.exe -l https://v.douyin.com/kcvSCe9/ -p C:\project\test +.\TikTokCommand.exe -C True -l https://v.douyin.com/kcvSCe9/ -p C:\project\test --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" linux与mac用户: -python TikTokCommand.py -l https://v.douyin.com/kcvSCe9/ -p /path/to/downdir +python TikTokCommand.py -C True -l https://v.douyin.com/kcvSCe9/ -p /path/to/downdir --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" ``` - 下载主页前n个作品 ``` windows用户: -.\TikTokCommand.exe -l https://v.douyin.com/kcvSCe9/ -p C:\project\test -n 30 +.\TikTokCommand.exe -C True -l https://v.douyin.com/kcvSCe9/ -p C:\project\test --postnumber 30 --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" linux与mac用户: -python TikTokCommand.py -l https://v.douyin.com/kcvSCe9/ -p /path/to/downdir -n 30 +python TikTokCommand.py -C True -l https://v.douyin.com/kcvSCe9/ -p /path/to/downdir --postnumber 30 --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" ``` - 下载主页全部喜欢 ``` windows用户: -.\TikTokCommand.exe -l https://v.douyin.com/kcvSCe9/ -p C:\project\test -M like +.\TikTokCommand.exe -C True -l https://v.douyin.com/kcvSCe9/ -p C:\project\test -M like --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" linux与mac用户: -python TikTokCommand.py -l https://v.douyin.com/kcvSCe9/ -p /path/to/downdir -M like +python TikTokCommand.py -C True -l https://v.douyin.com/kcvSCe9/ -p /path/to/downdir -M like --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" ``` - 下载主页前n个喜欢 ``` windows用户: -.\TikTokCommand.exe -l https://v.douyin.com/kcvSCe9/ -p C:\project\test -M like -n 30 +.\TikTokCommand.exe -C True -l https://v.douyin.com/kcvSCe9/ -p C:\project\test -M like --likenumber 30 --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" linux与mac用户: -python TikTokCommand.py -l https://v.douyin.com/kcvSCe9/ -p /path/to/downdir -M like -n 30 +python TikTokCommand.py -C True -l https://v.douyin.com/kcvSCe9/ -p /path/to/downdir -M like --likenumber 30 --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" ``` - 下载单个合集全部作品 ``` windows用户: -.\TikTokCommand.exe -l https://v.douyin.com/B3J63Le/ -p C:\project\test +.\TikTokCommand.exe -C True -l https://v.douyin.com/B3J63Le/ -p C:\project\test --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" linux与mac用户: -python TikTokCommand.py -l https://v.douyin.com/B3J63Le/ -p /path/to/downdir +python TikTokCommand.py -C True -l https://v.douyin.com/B3J63Le/ -p /path/to/downdir --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" ``` - 下载单个合集前n个作品 ``` windows用户: -.\TikTokCommand.exe -l https://v.douyin.com/B3J63Le/ -p C:\project\test -n 30 +.\TikTokCommand.exe -C True -l https://v.douyin.com/B3J63Le/ -p C:\project\test --mixnumber 30 --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" linux与mac用户: -python TikTokCommand.py -l https://v.douyin.com/B3J63Le/ -p /path/to/downdir -n 30 +python TikTokCommand.py -C True -l https://v.douyin.com/B3J63Le/ -p /path/to/downdir --mixnumber 30 --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" ``` - 下载主页全部合集下所有作品 ``` windows用户: -.\TikTokCommand.exe -l https://v.douyin.com/B38oovu/ -p C:\project\test -M mix +.\TikTokCommand.exe -C True -l https://v.douyin.com/B38oovu/ -p C:\project\test -M mix --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" linux与mac用户: -python TikTokCommand.py -l https://v.douyin.com/B38oovu/ -p /path/to/downdir -M mix +python TikTokCommand.py -C True -l https://v.douyin.com/B38oovu/ -p /path/to/downdir -M mix --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" ``` - 下载主页前n个合集下所有作品 ``` windows用户: -.\TikTokCommand.exe -l https://v.douyin.com/B38oovu/ -p C:\project\test -M mix -n 2 +.\TikTokCommand.exe -C True -l https://v.douyin.com/B38oovu/ -p C:\project\test -M mix --allmixnumber 2 --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" linux与mac用户: -python TikTokCommand.py -l https://v.douyin.com/B38oovu/ -p /path/to/downdir -M mix -n 2 +python TikTokCommand.py -C True -l https://v.douyin.com/B38oovu/ -p /path/to/downdir -M mix --allmixnumber 2 --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" ``` - 下载音乐(原声)集合下所有作品 ``` windows用户: -.\TikTokCommand.exe -l https://v.douyin.com/S6YMNXs/ -p C:\project\test +.\TikTokCommand.exe -C True -l https://v.douyin.com/S6YMNXs/ -p C:\project\test --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" linux与mac用户: -python TikTokCommand.py -l https://v.douyin.com/S6YMNXs/ -p /path/to/downdir +python TikTokCommand.py -C True -l https://v.douyin.com/S6YMNXs/ -p /path/to/downdir --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" ``` - 下载音乐(原声)集合下前n个作品 ``` windows用户: -.\TikTokCommand.exe -l https://v.douyin.com/S6YMNXs/ -p C:\project\test -n 30 +.\TikTokCommand.exe -C True -l https://v.douyin.com/S6YMNXs/ -p C:\project\test --musicnumber 30 --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" linux与mac用户: -python TikTokCommand.py -l https://v.douyin.com/S6YMNXs/ -p /path/to/downdir -n 30 +python TikTokCommand.py -C True -l https://v.douyin.com/S6YMNXs/ -p /path/to/downdir --musicnumber 30 --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" ``` - 关闭头像下载, cover, music json数据也是一样的设置对应选项为 False ``` windows用户: -.\TikTokCommand.exe -l https://v.douyin.com/kcvSCe9/ -p C:\project\test -a False +.\TikTokCommand.exe -C True -l https://v.douyin.com/kcvSCe9/ -p C:\project\test -a False --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" linux与mac用户: -python TikTokCommand.py -l https://v.douyin.com/kcvSCe9/ -p /path/to/downdir -a False +python TikTokCommand.py -C True -l https://v.douyin.com/kcvSCe9/ -p /path/to/downdir -a False --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" ``` -- 除了单个作品和直播, 其余模式均支持多线程下载, 默认5个线程, 可以自己调节线程数 +- 多线程设置, 默认5个线程, 可以自己调节线程数 ``` windows用户: -.\TikTokCommand.exe -l https://v.douyin.com/kcvSCe9/ -p C:\project\test -t 8 +.\TikTokCommand.exe -C True -l https://v.douyin.com/kcvSCe9/ -p C:\project\test -t 8 --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" linux与mac用户: -python TikTokCommand.py -l https://v.douyin.com/kcvSCe9/ -p /path/to/downdir -t 8 +python TikTokCommand.py -C True -l https://v.douyin.com/kcvSCe9/ -p /path/to/downdir -t 8 --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" ``` - 直播推流地址解析 ``` windows用户: -.\TikTokCommand.exe -l https://live.douyin.com/802939216127 -p /path/to/downdir +.\TikTokCommand.exe -C True -l https://live.douyin.com/802939216127 -p /path/to/downdir --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" 或者 -.\TikTokCommand.exe -l https://v.douyin.com/SnXMoh2/ -p /path/to/downdir +.\TikTokCommand.exe -C True -l https://v.douyin.com/SnXMoh2/ -p /path/to/downdir --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" linux与mac用户: -python TikTokCommand.py -l https://live.douyin.com/802939216127 -p /path/to/downdir +python TikTokCommand.py -C True -l https://live.douyin.com/802939216127 -p /path/to/downdir --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" 或者 -python TikTokCommand.py -l https://v.douyin.com/SnXMoh2/ -p /path/to/downdir +python TikTokCommand.py -C True -l https://v.douyin.com/SnXMoh2/ -p /path/to/downdir --cookie "msToken=xxx; ttwid=xxx; odin_tt=xxx; passport_csrf_token=xxx; sid_guard=xxx;" ``` # ToDo @@ -260,7 +428,7 @@ python TikTokCommand.py -l https://v.douyin.com/SnXMoh2/ -p /path/to/downdir - [x] 获取分享的音乐(原声)链接下的所有作品 - [x] 指定下载作品数量 - [ ] 获取热搜榜数据 -- [ ] 多主页链接批量下载 +- [x] 多链接批量下载 - [x] 多线程下载 - [ ] 保存数据至数据库 - [ ] 制作成接口