B站抖音视频下载全攻略:yt-dlp与ffmpeg实战指南

发布时间:2026/9/24 6:37:06
B站抖音视频下载全攻略:yt-dlp与ffmpeg实战指南 1. 为什么我要自己动手做视频下载这件事先说结论B站和抖音的视频下载看起来是个小需求但真到用的时候你会发现市面上的工具要么广告满天飞要么下着下着就失效要么偷偷给你塞一堆捆绑软件。我自己做内容归档两年多前前后后试过不下二十种方案最后沉淀出一套相对稳定的做法今天把它完整拆开讲清楚。这篇文章适合三类人一是做内容运营、需要批量收集素材的同行二是做学术研究、需要保存公开视频做语料分析的朋友三是单纯想把自己喜欢的视频存到本地、防止哪天原链接失效的普通用户。不管你是零基础还是有点技术底子我都会把原理、工具选型、实操步骤和踩过的坑讲透。需要提前说明的是我讨论的所有场景都基于公开可访问的视频内容用于个人学习、研究和备份。任何涉及付费内容、会员专享内容的绕过行为都不在本文讨论范围内也不建议大家去做。技术是中性的但使用边界要自己守住。核心关键词先摆出来B站视频下载、抖音视频下载、视频下载工具、去水印、批量下载、解析工具。这几个词基本覆盖了大家搜索时的真实意图。下面我按“整体思路—核心细节—实操过程—问题排查”的顺序展开每一块都会给出可直接复现的方案。2. 整体方案设计与工具选型思路2.1 先搞清楚视频下载到底难在哪很多人以为下载视频就是“找到文件地址右键保存”实际远没这么简单。以B站为例一个视频的播放链路大致是这样的网页播放器向服务器请求一个播放清单文件这个清单里记录了视频被切成多少个小片段、每个片段的地址和音视频轨道的分离信息。也就是说你看到的“一个视频”在服务器端其实是音轨和视频轨分开存储、分片传输的。抖音的逻辑又不一样。抖音的视频通常是整段MP4但URL里带了时效性签名参数过期就失效而且默认带水印。所以抖音下载的核心是“拿到无水印的原始地址”B站下载的核心是“把分离的音视频轨合并”。理解了这两点你就明白为什么很多“一键下载”工具会失效——它们依赖的接口变了或者签名算法更新了工具没跟上就废了。这也是我倾向于用成熟开源工具自己写少量脚本的原因可控、可维护、不依赖某个随时可能跑路的网站。2.2 工具选型的三个硬标准我选工具只看三条开源可查、命令行优先、更新活跃。理由很直接开源可查意味着没有后门不会偷偷上传你的数据命令行优先意味着可以脚本化、批量处理效率比点鼠标高一个数量级更新活跃意味着接口变了有人修不会用两个月就成废铁。基于这三条我最终的主力工具是yt-dlpB站、YouTube等通用和you-get备用抖音则用yt-dlp 配合自定义请求头或专门的解析脚本。下面这张表是我实测过的几个方案对比你可以按需选工具支持平台批量能力去水印上手难度维护状态yt-dlpB站/抖音/多平台强抖音需配置中极活跃you-getB站/多平台中不支持低活跃浏览器插件类单平台弱部分支持极低不稳定在线解析网站单平台弱部分支持极低随时失效提示在线解析网站我基本不用一是广告多二是你不知道它把你的链接拿去做了什么三是今天能用明天可能就没了。个人备份场景本地工具永远是最稳的。2.3 为什么我不推荐“全家桶式”下载软件市面上有些打包好的下载软件界面花哨号称支持几百个平台。我早期也用过后来全卸载了。原因有三个第一这类软件往往捆绑安装装一个来一堆第二它们的核心其实也是调用开源工具只是套了个壳但壳里可能加了广告SDK第三出问题时你没法排查只能等作者更新。自己用命令行工具前期花半小时配置后面就是复制粘贴的事长期看反而省时间。这个账我算过用图形软件每次下载要经历“打开软件—粘贴链接—选清晰度—等广告—点下载”五步命令行一条命令搞定批量一百个视频的差距是几小时。3. 核心细节解析与实操要点3.1 B站下载音视频分离与合并的关键B站下载最容易踩的坑就是下下来只有画面没声音或者只有声音没画面。这是因为B站的高清视频1080P及以上普遍采用DASH 格式音轨和视频轨是分开的两个流。你需要工具同时下载两条流再用ffmpeg合并。yt-dlp 默认就会处理这个合并但前提是你系统里装了 ffmpeg。所以第一步不是装 yt-dlp而是先装 ffmpeg。这一点很多人忽略结果下出来的文件是分离的还以为是工具坏了。关于清晰度选择B站不同清晰度对应的编码格式不一样清晰度编码是否需要登录备注360P/480PAVC否直接可下720PAVC/HEVC部分需要建议登录1080PAVC/HEVC通常需要登录后可用1080P / 4KHEVC/AV1需要部分需大会员注意我这里说的“登录”是指用你自己正常注册的账号通过工具提供的 cookie 导入功能让工具以你的身份请求公开内容。这属于正常使用范畴但请务必遵守平台规则不要用于批量抓取或商业用途。实操上我一般用-f参数指定格式比如-f bv*ba/b表示“最佳视频轨最佳音频轨如果没有就退而求其次选合并流”。这个参数写法是 yt-dlp 的通用语法记住一次能用一辈子。3.2 抖音下载去水印的核心逻辑抖音的去水印本质是找到不带水印的原始视频地址。抖音在生成分享链接时会同时存在带水印和不带水印两个版本普通用户分享出来的是带水印的但通过解析分享链接里的视频ID可以请求到无水印的播放地址。具体做法是把抖音分享出来的短链接形如https://v.douyin.com/xxxx/先做一次重定向跟随拿到真实的视频ID再用这个ID去请求播放接口。yt-dlp 对抖音的支持时好时坏因为抖音的接口变动比较频繁。我的经验是保持 yt-dlp 更新到最新版大部分时候能直接用如果不行就退回到手动解析的方式。手动解析的步骤我整理成下面这样方便你对照操作复制抖音分享链接在浏览器打开观察地址栏跳转后的URL从URL中提取video/后面的数字ID这就是视频的唯一标识用这个ID拼接播放接口地址具体接口会变这里不写死思路是找到返回JSON的接口从返回的JSON里找到play_addr字段里面的URL就是无水印地址用下载工具把这个URL存下来。这个过程听起来绕但熟练之后两分钟搞定。如果你嫌麻烦直接用 yt-dlp 加--no-check-certificate和自定义 User-Agent成功率也不低。3.3 批量下载把重复劳动交给脚本单个视频下载谁都会真正体现效率的是批量。B站批量下载的入口通常是收藏夹、UP主主页、合集。yt-dlp 支持直接传入这些页面的URL它会自动解析出里面所有视频并逐个下载。批量下载有两个参数必须掌握-o控制输出文件名模板--download-archive记录已下载的视频避免重复。我常用的模板是yt-dlp -o %(uploader)s/%(title)s.%(ext)s \ --download-archive downloaded.txt \ --sleep-interval 3 \ 播放列表URL这里的--sleep-interval 3是每次下载间隔3秒目的是降低请求频率避免给服务器造成压力也降低被限流的概率。这一点很重要批量抓取时如果不加间隔很容易触发风控轻则限速重则临时封禁。做技术要有分寸别把人家服务器当自己家硬盘。抖音批量下载相对麻烦因为抖音没有公开的“合集”概念至少不像B站那么规整。我的做法是先用工具把某个账号的公开视频列表抓下来这一步涉及页面解析拿到视频ID列表后再逐个解析下载。这个过程我一般控制在个人备份的合理范围内不会大规模抓取。4. 完整实操过程与核心环节实现4.1 环境准备三件套装好就成功一半我的环境是 Windows WSLLinux子系统但下面的步骤在纯 Windows、macOS、Linux 上都通用只是安装命令略有差异。核心三件套是Python、ffmpeg、yt-dlp。先装 Python建议 3.9 以上版本。Windows 用户去官网下安装包记得勾选“Add to PATH”。macOS 用户用brew install python。Linux 用户基本自带。然后装 ffmpeg这是合并音视频的关键。Windows 用户推荐用winget install ffmpeg或者去官网下静态编译版解压后把bin目录加到环境变量。macOS 用brew install ffmpeg。Linux 用apt install ffmpeg或对应包管理器。最后装 yt-dlp最省事的方式是用 pippip install -U yt-dlp装完验证一下yt-dlp --version ffmpeg -version两条命令都能输出版本号环境就算齐了。这里有个小坑如果你同时装了多个 Python 版本pip 可能装到了不是你预期的那个环境里导致命令行找不到 yt-dlp。解决办法是用python -m yt-dlp代替yt-dlp或者用pip show -f yt-dlp看装到哪了。4.2 B站单个视频下载一条命令的事假设你要下载一个B站视频地址是https://www.bilibili.com/video/BVxxxxxxxxx。最基础的命令是yt-dlp https://www.bilibili.com/video/BVxxxxxxxxx它会自动选择最佳画质并合并。如果你想指定 1080P可以先用-F列出所有可用格式yt-dlp -F 视频URL输出会是一个表格每行前面有个格式编号。找到你想要的视频轨和音频轨编号比如视频是137音频是140就用yt-dlp -f 137140 视频URL合并后的文件默认是.mp4或.mkv。如果你想要 mp4加--merge-output-format mp4。关于登录B站 1080P 以上通常需要登录。yt-dlp 支持从浏览器读取 cookie命令是--cookies-from-browser chrome把 chrome 换成你用的浏览器。这个功能很方便但要注意它读取的是你本地的登录状态请确保你的账号使用符合平台规则。4.3 抖音视频下载处理短链接和请求头抖音下载我通常分两步。第一步把短链接展开。可以用 curl 看重定向curl -sIL https://v.douyin.com/xxxx/ | grep -i location拿到真实URL后提取视频ID。第二步用 yt-dlp 下载但抖音对请求头比较敏感建议加上 User-Agentyt-dlp --user-agent Mozilla/5.0 (Windows NT 10.0; Win64; x64) ... 真实URL如果 yt-dlp 直接支持它会自动处理去水印。如果不支持就需要手动解析接口。手动解析我用 Python 写个小脚本核心逻辑是请求分享页HTML用正则提取videoId再请求播放接口拿play_addr。这个脚本不长二十行左右但接口地址会变所以我不在这里写死思路给你你自己按当前接口调整。提示抖音的接口变动非常频繁今天能用的方法下个月可能就失效。所以我的建议是优先用 yt-dlp 这类活跃维护的工具让专业的人去跟进接口变化你只管用。4.4 批量下载B站收藏夹一次搞定整个列表这是我最常用的场景。假设你有一个收藏夹地址是https://space.bilibili.com/xxx/favlist?fidxxx。直接把这个URL丢给 yt-dlpyt-dlp -o %(uploader)s/%(playlist_index)02d-%(title)s.%(ext)s \ --download-archive archive.txt \ --sleep-interval 5 \ --merge-output-format mp4 \ 收藏夹URL几个参数解释一下%(playlist_index)02d是两位数的序号方便排序--download-archive记录已下载的ID下次再跑同一个列表已下载的会自动跳过--sleep-interval 5是每个视频间隔5秒稳一点。实测下来一个两百个视频的收藏夹跑一晚上基本能下完。中途如果断了重新跑一遍命令它会从断点继续不会重复下载。这个断点续传能力是 yt-dlp 自带的非常省心。4.5 抖音批量下载的折中方案抖音批量我没有找到特别优雅的官方支持方式我的折中方案是半自动。先用工具把目标账号的视频列表导出成文本每行一个视频ID或URL然后写个循环脚本逐个调用 yt-dlp。while read url; do yt-dlp --user-agent ... -o %(title)s.%(ext)s $url sleep 5 done douyin_list.txt这个方案的好处是可控每个视频之间的间隔你能自己调出问题也能定位到具体是哪个视频。坏处是需要你先准备好列表。列表怎么来如果是自己的账号可以从创作服务平台导出如果是公开账号那就得靠页面解析这一步我建议量力而行控制在合理范围内。5. 常见问题与排查技巧实录5.1 下载下来没声音/没画面怎么办这是最高频的问题九成是因为 ffmpeg 没装好或者没在 PATH 里。排查步骤先运行ffmpeg -version如果报“command not found”那就是没装或没配好环境变量。装好之后重新下载yt-dlp 会自动调用 ffmpeg 合并。如果 ffmpeg 没问题还是没声音检查一下是不是用了-f参数只选了视频轨。用-F看看格式列表确认你选的格式编号里视频轨和音频轨是分开的两个然后用连接。5.2 提示“Unable to extract”或“Unsupported URL”这通常意味着工具版本太旧跟不上平台接口变化。第一反应应该是更新pip install -U yt-dlp如果更新后还不行可能是该视频有特殊限制比如付费、地区限制这种情况我建议直接放弃不要花时间去绕。技术能力应该用在正道上。5.3 下载速度慢或被限流批量下载时速度慢多半是触发了平台的频率限制。解决办法就是加--sleep-interval把间隔调大比如从3秒调到10秒。另外可以加--limit-rate限制下载速度比如--limit-rate 2M避免占满带宽引起注意。还有一个技巧是错峰下载比如凌晨跑批量任务这时候服务器压力小速度也快。我自己习惯是晚上睡觉前挂上第二天早上收菜。5.4 常见问题速查表问题现象可能原因解决办法无声音ffmpeg未安装安装ffmpeg并配置PATH无画面只选了音频轨用-F确认格式选视频音频提示不支持URL工具版本旧pip install -U yt-dlp下载中断网络波动重新运行自动断点续传速度极慢触发限流加大sleep-interval错峰下载文件名乱码编码问题加--restrict-filenames或指定-o模板抖音去水印失败接口变动更新工具或手动解析5.5 几个我踩过的坑第一个坑早期我用某在线解析网站下B站视频下下来的文件是.flv格式很多播放器不支持。后来才知道那是老的低清格式。现在用 yt-dlp 默认就是 mp4省心多了。第二个坑有次批量下载一个UP主的视频没加间隔结果下了三十个之后全部失败等了两小时才恢复。从那以后我批量必加--sleep-interval再也没出过问题。第三个坑文件名里的特殊字符导致保存失败。Windows 对文件名有限制冒号、问号这些不能出现。解决办法是用--restrict-filenames参数它会自动把特殊字符替换掉。第四个坑cookie 过期。用浏览器 cookie 下载B站高清视频过一段时间 cookie 失效下载就变成低清或者失败。解决办法是重新从浏览器读取一次或者用--cookies指定一个手动导出的 cookie 文件定期更新。6. 关于稳定性和长期可用的一点个人经验工具这东西没有一劳永逸的。平台在变工具也在变今天好用的方案半年后可能需要调整。我的应对策略是保持工具更新保持方案简单保持使用克制。保持工具更新就是定期跑一下pip install -U yt-dlp让它始终是最新版。保持方案简单就是能用一条命令解决的事绝不搞复杂脚本减少出问题的环节。保持使用克制就是批量下载时加间隔、控数量不贪多细水长流。另外我建议你建一个自己的“下载归档”目录结构按平台、按UP主、按日期分类配合--download-archive记录这样时间长了也不会乱。我自己的归档目录跑了两年几千个视频找起来依然很快靠的就是一开始把结构定好。最后分享一个小技巧如果你经常下载同一批UP主的视频可以把常用的命令写成 shell 脚本或 bat 批处理双击就能跑。比如我有个download_bili.sh里面就一行 yt-dlp 命令加参数每次只需要改一下URL。这种小自动化日积月累能省下大量时间。技术服务于需求别为了折腾而折腾。找到一套自己顺手的方案稳定用下去比天天追新工具强得多。