用 tdl 批量下载 Telegram 群组/频道里的图片和视频
Telegram 里关注的群组、频道经常有大量图片和视频,官方客户端一张张点"保存"既慢又烦,遇到设了"禁止保存"的频道更是无从下手。这篇介绍 tdl——一个基于 Telegram 官方 MTProto 协议的命令行下载器,多线程、速度快,能按时间/类型批量导出整个频道的媒体,连"禁止保存/转发"的内容也能下。
tdl 是什么
tdl(Telegram Downloader)是一个用 Go 写的开源命令行工具:
- 快:多线程并发下载,跑满带宽,比官方客户端快几倍。
- 批量:先把一个频道/群的消息导出成清单,再一次性全下。
- 会绕限制:对设了"禁止保存内容"的频道,它通过 takeout 会话也能下载(仅供你自己已能看到的内容)。
- 跨平台:Windows / macOS / Linux 都有。
安装
# Windows(用 Scoop,需先加 extras 源)
scoop bucket add extras
scoop install tdl
# macOS(用 Homebrew)
brew install telegram-downloader
# Linux / 通用:从 Releases 下载对应平台的二进制
# https://github.com/iyear/tdl/releases
# 或用 Go 安装
go install github.com/iyear/tdl@latest
装完确认:
tdl version
第一步:登录
Telegram 在墙内被封,先准备好代理(端口换成你自己的)。tdl 的全局参数 --proxy 各子命令都能加:
# 扫码登录(手机 Telegram 扫一下,要显式加 -T qr)
tdl login -T qr --proxy socks5://127.0.0.1:7890
# 或用手机验证码登录
tdl login -T code --proxy socks5://127.0.0.1:7890
# 复用电脑上已登录的 Telegram Desktop 会话(这其实是默认方式,不加 -T 就是它)
tdl login -T desktop
小贴士:用
-n 名字可以给会话起个命名空间,方便多账号切换,后续命令都带上同一个-n即可。
第二步:找到目标群/频道
列出你加入的所有会话,找到目标的 ID 或 @用户名:
tdl chat ls --proxy socks5://127.0.0.1:7890
记下目标频道的 @username(公开频道)或数字 ID(私有群)。注意:你必须先加入该群/频道,才能下载里面的内容。
第三步:导出消息清单
把目标频道里的媒体消息导出成一个 JSON 清单。可以按时间范围、消息 ID 范围过滤:
# 导出整个频道的媒体消息
tdl chat export -c @目标频道 -o tdl-export.json --proxy socks5://127.0.0.1:7890
# 只导出某个时间段(Unix 时间戳)
tdl chat export -c @目标频道 -T time -i 1704038400,1735660800 -o tdl-export.json
# 只导出最近 N 条
tdl chat export -c @目标频道 -T last -i 500 -o tdl-export.json
第四步:批量下载
拿着清单一次性全下,下载时再按文件类型筛选、设并发:
tdl dl -f tdl-export.json \
-d ./download \
--include jpg,png,jpeg,gif,mp4,mov \
-t 8 -l 4 \
--skip-same \
--proxy socks5://127.0.0.1:7890
几个常用参数:
-d ./download—— 下载到哪个目录。--include jpg,png,mp4,...—— 只下这些扩展名(只要图就去掉视频后缀,反之亦然);也可以用--exclude排除。-t 8线程数、-l 4并发任务数 —— 别开太高,太激进容易触发 Telegram 的限速(flood wait)。--skip-same—— 已下过的跳过,断点续传/增量更新靠它。--continue—— 续传未完成的下载。
只下某几条
如果只想要某几条消息的媒体,不用导出清单,直接喂消息链接:
tdl dl -u "https://t.me/频道用户名/12345" \
-u "https://t.me/频道用户名/12346" \
--proxy socks5://127.0.0.1:7890
踩过的坑
- 下不动 / 连不上 —— 九成是代理没配好,确认
--proxy端口和协议(socks5/http)对得上。 - 报 FLOOD_WAIT —— 并发开太高被限速了,把
-t/-l调小,等一会儿再跑。 - 私有频道下不了 —— 你得先是该频道成员;纯靠链接、没加入是下不了的。
- “禁止保存"的频道 —— tdl 默认会用 takeout 会话尝试绕过,仍下不动可加
--takeout显式开启。 - 文件名乱/想自定义 —— 用
--template定制命名,比如按{{ .MessageID }}_{{ .FileName }}之类的模板。 - 多账号 —— 全程带上同一个
-n 命名空间,会话互不干扰。
最后
tdl 很强,但请只下载你有权获取的内容,尊重创作者与群组规则,下载的素材自用即可,别拿去二次传播或牟利。
命令以 tdl 当前版本为准,Telegram 接口和工具都在更新,命令失效时先 tdl -h 或看官方文档:https://docs.iyear.me/tdl/ 。