Telegram 受限频道视频下载实战:tdl 从安装到批量下载

URL
date
Aug 6, 2026
slug
tdl-telegram-download
summary
用 tdl 下载 Telegram 受限频道视频的完整教程:安装、登录、找频道ID、批量下载
status
Published
tags
telegram
tdl
教程
工具
type
Post
notion image
notion image
你有没有遇到过这种情况:在 Telegram 里看到一个频道里有很多想收藏的视频,但频道管理员设置了「禁止保存」——转发按钮是灰的,「保存到相册」选项也不见了。
这篇文章记录我用 tdl (Telegram Downloader) 解决这个问题的完整过程,从安装、登录、找频道 ID、到批量下载。所有步骤都在 macOS (Apple Silicon) 上实测通过(截至 tdl v0.20.3)。
⚠️ 先说清楚:本文讨论的是下载你已有权访问的内容。tdl 是合法的 Telegram 第三方客户端工具,但「有权访问」不等于「有权复制、再分发或商用」 - 请遵守频道规则、版权法律和平台条款。对任何内容的下载和使用,责任在使用者。

为什么需要 tdl

先说原理。Telegram 的「禁止保存」是纯客户端 UI 限制——官方客户端(手机 App、桌面版)遵守了频道管理员的设置,不给你显示下载按钮。但 Telegram 的服务端 API(MTProto)仍然会返回完整的媒体数据,因为你的账号是有权限查看这些内容的。
所以,任何走 MTProto API 的第三方工具都能绕过这个客户端限制。tdl 就是其中之一,用 Go 写的,单文件二进制,速度快,明确支持受限频道。

安全与合规须知

在开始之前,你需要了解几个关键点。

封号风险评估

根据社区经验和 Telegram 风控机制的一般规律:
  • tdl 走的是 Telegram 官方开放的 MTProto API,使用第三方客户端本身不是封号理由。
  • Telegram 主要打击 spam 行为(批量加群、群发广告、爬虫式拉人),个人下载已有权限的内容通常不在打击范围。
  • 但需要注意:绕过内容保护机制、高频批量请求理论上仍可能触发风控。保持合理频率,不要同时对大量频道发起下载。
  • 你更可能遇到的是 FloodWait(限速) - 下载太猛时 Telegram 要求等待,tdl 会自动处理。这不是封号。

真正要注意的安全问题

风险不在封号,在账号被盗,三个纪律:
纪律一:保护好 session 文件。 tdl 登录后会在本地存储登录态(session 文件)。谁拿到这个文件,谁就能以你的身份操作账号——不需要验证码。所以:别同步到网盘、别提交到 git、别发给别人。
纪律二:只用开源知名工具。 tdl、telegram_media_downloader、Pyrogram、Neet-Nestor 脚本——这些代码公开可审。千万别碰「在线下载网站」,让你输入手机号和验证码的网页等于直接送账号。
纪律三:开启两步验证 + 定期检查活动会话。 设置 → 隐私与安全 → 两步验证。注意:2FA 不能阻止持有有效 session 的人读取你的消息 - 如果发现 session 泄露,应立刻在 Telegram「设置 → 设备 → 活动会话」中终止该会话,然后修改两步验证密码。养成定期检查活动会话的习惯,看到不认识的设备立刻踢掉。

安装 tdl

macOS (Apple Silicon)

Homebrew 暂时没有收录 tdl,直接从 GitHub releases 下载:
# 下载最新 arm64 macOS 版
cd /tmp
curl -sL -o tdl.tar.gz "https://github.com/iyear/tdl/releases/latest/download/tdl_MacOS_arm64.tar.gz"
tar xzf tdl.tar.gz

# 放到 PATH 里的某个用户可写目录
chmod +x tdl
mkdir -p ~/.local/bin
mv tdl ~/.local/bin/tdl

# 验证
tdl version
如果你用的是 Intel Mac,把 URL 里的 arm64 换成 amd64。
不确定架构?运行 uname -m:输出 arm64 就用 arm64 版,输出 x86_64 就用 amd64 版。

Linux

curl -sL -o tdl.tar.gz "https://github.com/iyear/tdl/releases/latest/download/tdl_Linux_arm64.tar.gz"
tar xzf tdl.tar.gz
sudo mv tdl /usr/local/bin/tdl

验证安装

tdl version
# Version: 0.20.3 (或更新)

登录

第一次使用需要登录。tdl 支持几种登录方式:

方式一:手机号 + 验证码(推荐)

tdl login -T code
会让你输入手机号(带国家区号,如 +8613800138000),然后 Telegram 会发验证码到你的 Telegram App(不是短信,除非你没法收 Telegram 消息)。输入验证码即可。

方式二:扫码登录

tdl login -T qr
终端会显示一个二维码,用手机 Telegram 扫码确认。适合不方便输手机号的环境。

⚠️ 方式三:从 Telegram Desktop 导入(可能失败)

tdl login
默认会尝试从 Telegram Desktop 的本地 session 导入登录态。通常是因为 Telegram Desktop 的本地 `tdata` 加密、版本或格式不兼容:
Error: decrypt keyEncrypted: msg_key mismatch
遇到这个错误不用慌,不是你的账号有问题,只是 tdl 解不开 Telegram Desktop 加密的本地 session。换成 -T code 或 -T qr 就行。

找到目标频道 ID

下载需要知道频道的标识符。几种获取方式:

公开频道:直接用消息链接

如果你要下的是公开频道的某几条消息,直接用 t.me 链接,tdl 能直接识别,不需要频道 ID:
tdl download -u "https://t.me/channelname/123"

列出所有对话/频道

登录后,列出你所有加入的频道和对话:
tdl chat ls
输出格式大致是:
<channel_id>    channel    <频道名称>
<dialog_id>     dialog     <对话名称>
...
用 grep 过滤关键词快速找到目标频道:
tdl chat ls | grep "关键词"
记下前面的数字就是频道 ID。

其他获取方式

  • @userinfobot / @getidsbot:在 Telegram 里给这些 bot 发消息,它们会回复你当前聊天/频道/用户的 ID。把 bot 拉进频道发条消息也行(拿到后踢掉)。
  • Telegram Web:在 web.telegram.org 打开频道,地址栏 URL 里的数字就是 ID。

批量下载频道视频

这是本文的核心操作。tdl v0.20+ 的下载流程是两步走(旧版是一步,新版改了)。

第一步:导出消息列表

tdl chat export -c <频道ID> --all -o messages.json
参数说明:
  • -c <频道ID>:目标频道
  • --all:导出所有消息(包括非媒体消息,但后续可以过滤)
  • -o messages.json:输出 JSON 文件路径

第二步:下载

tdl download -f messages.json -i mp4 -d ~/Downloads/tg_videos
参数说明:
  • -f messages.json:从上一步导出的 JSON 读取消息列表
  • -i mp4:只下载文件名以 .mp4 结尾的文件。注意:这按文件名扩展名判断,不是按 MIME 类型。如果视频以其他格式存储(如 .mkv、无扩展名),会被漏掉。可以用 -i mp4,mkv,mov 覆盖更多格式
  • -d ~/Downloads/tg_videos:存储目录(不存在会自动创建)

只下载最新的 N 条消息

如果频道内容太多,你只想抓最新的 50 个视频:
# 导出最新 50 条消息
tdl chat export -c <频道ID> -T last -i 50 -o latest50.json

# 只下 mp4
tdl download -f latest50.json -i mp4 -d ~/Downloads/tg_videos
-T last -i 50 表示「从最新开始,取 50 条」。

控制下载节奏(防 FloodWait)

如果下载量大,撞到 Telegram 的 FloodWait 限速,tdl 会自动等待。你也可以主动调参降低并发:
小批量(几十条消息)用默认参数就行,撞限速概率很低。几百个以上建议加 --delay 1s。

断点续传

下载中断了(网络断了、手动 Ctrl-C、电脑休眠)不用从头开始:
tdl download -f messages.json -i mp4 -d ~/Downloads/tg_videos --continue
--continue 会跳过已下载完的文件,从断点接着下。

完整工作流示例

把上面的步骤串起来,下载某个受限频道最新 50 个视频的完整流程:
# 1. 登录(只需第一次)
tdl login -T code

# 2. 找到频道 ID
tdl chat ls | grep "频道关键词"
# 假设得到频道 ID: <CHANNEL_ID>

# 3. 导出最新 50 条消息
tdl chat export -c <CHANNEL_ID> -T last -i 50 -o latest.json

# 4. 只下载 mp4
tdl download -f latest.json -i mp4 -d ~/Downloads/tg_videos

# 5. 如果中断了,续传
tdl download -f latest.json -i mp4 -d ~/Downloads/tg_videos --continue

常见问题

Q: tdl login 报 decrypt keyEncrypted: msg_key mismatch

Telegram Desktop 的本地 session 解密失败(你设了本地密码或两步验证)。换用 tdl login -T code(手机号+验证码)或 tdl login -T qr(扫码)。

Q: unknown shorthand flag: 'c' in -c

你看到的教程是基于 tdl v0.14 或更早的旧版语法。v0.20+ 改了两步流程:先 tdl chat export -c <ID> 导出 JSON,再 tdl download -f <json> 下载。download 命令不再直接接受频道 ID。

Q: 下载到一半提示 FloodWait

正常现象,tdl 会自动等待。如果频繁出现,降低并发:-l 1 --delay 2s。

Q: 旧版 tdl 在 /usr/local/bin 装新版没权限覆盖

放到 ~/.local/bin/tdl(在 PATH 里,用户可写,优先级通常更高)。或者用 sudo 替换旧版。

总结

Telegram 受限频道的「禁止保存」只是客户端 UI 限制,用 tdl 这类走 MTProto API 的工具就能正常下载。关键步骤:

© Ying Bun 2021 - 2026