用 yt-dlp 只拉音频归档时,我修好了两处参数

频道里有一批只适合听的内容:访谈、播客式的长视频、直播回放。我打算只留音轨,用 128k 的 m4a 存着,这样 300 多条视频预计占几十 GB,比存完整视频省得多。环境是 Debian 12,yt-dlp 版本 2024 年下半年某个 release,Python 3.11,输出到一块外接盘。

第一次跑,我图省事,直接写了这么一行:

yt-dlp -x --audio-format m4a -o "%(id)s.%(ext)s" \
  --batch-file ids.txt

结果有两个问题:一是输出目录里混进了 .webm 和 .m4a 两份文件,二是偶尔有文件只有几百字节。第一个问题是因为 -x 默认会保留原始音频文件,需要显式加 -k 的反面,也就是 --no-keep-video 之外还要处理 --audio-format 的临时文件,最直接的是加上 --no-part 之外再确认 --paths 的落点。我最后用的是:

yt-dlp -x --audio-format m4a --audio-quality 0 \
  -o "%(upload_date)s-%(id)s.%(ext)s" \
  --download-archive done.txt \
  --sleep-requests 1 --limit-rate 2M \
  --batch-file ids.txt

第二个问题更隐蔽。几百字节的文件是直播回放里那些「正在直播中」的条目,yt-dlp 拿到的只是占位信息,实际音轨还没生成。我的处理是先过滤掉 live_status 不为 not_live 的条目,用 --match-filter "live_status != is_live",隔几天再补跑一次。

为什么这么做:--download-archive 是断点续跑的唯一可靠依据,比拿文件名去比对稳;--sleep-requests 和 --limit-rate 是给频道后台和带宽留余量,代价是 300 条要跑一晚上,但比被限速或触发风控再回头查日志划算。

会失效的地方:--match-filter 对已下架或私有视频不生效,它们会直接报错中断 batch,得配合 --ignore-errors;upload_date 在首播内容上可能为空,文件名会变成 NA-xxx.m4a,我后来改成用 %(id)s 打头、日期放后面;外接盘是 exFAT,长文件名偶尔截断,这个只能靠 id 保证唯一。

你们归档纯音频时,是怎么处理直播回放这类「先有壳后有肉」的条目的?

0
赞同度 100% · 0 条评论 · 5 阅读

0 条评论

支持 Markdown · 回复会实时推送给对方

还没有评论,写下第一条。