进阶功能
后处理
音频提取、缩略图嵌入、元数据写入等后处理功能
后处理器(Post-Processor)在下载完成后对文件进行进一步加工:提取音频、嵌入封面、写入元数据、转换格式等。
后处理器概览
| 后处理器 | CLI 选项 | 功能 |
|---|---|---|
FFmpegExtractAudio | -x --audio-format | 提取音频 |
EmbedThumbnail | --embed-thumbnail | 嵌入封面图 |
FFmpegMetadata | --add-metadata | 写入元数据 |
EmbedSubtitle | --embed-subs | 嵌入字幕 |
FFmpegVideoConvertor | --recode-video | 转换视频格式 |
SponsorBlock | --sponsorblock-mark/remove | 跳过/删除赞助片段 |
音频提取
# 提取音频为 m4a
yt-dlp -x --audio-format m4a --audio-quality 0 "URL"
# 提取为 mp3 并指定比特率
yt-dlp -x --audio-format mp3 --audio-quality 320K "URL"
# 提取为无损 flac
yt-dlp -x --audio-format flac "URL"import yt_dlp
ydl_opts = {
'format': 'bestaudio/best',
'postprocessors': [{
'key': 'FFmpegExtractAudio',
'preferredcodec': 'm4a',
'preferredquality': '0',
}],
}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
ydl.download(["URL"])嵌入封面图
# 下载并嵌入缩略图
yt-dlp --embed-thumbnail "URL"
# 音频文件嵌入封面
yt-dlp -x --audio-format m4a --embed-thumbnail "URL"import yt_dlp
ydl_opts = {
'format': 'bestaudio/best',
'writethumbnail': True, # 必须先下载缩略图
'postprocessors': [
{
'key': 'FFmpegExtractAudio',
'preferredcodec': 'm4a',
'preferredquality': '0',
},
{'key': 'EmbedThumbnail'}, # 嵌入到音频文件
],
}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
ydl.download(["URL"])Python 中使用 EmbedThumbnail 必须同时设置 'writethumbnail': True,否则没有缩略图可供嵌入。
写入元数据
# 写入元数据到文件
yt-dlp --add-metadata "URL"
# 音频 + 封面 + 元数据(完整配置)
yt-dlp -x --audio-format m4a --audio-quality 0 \
--embed-thumbnail --add-metadata "URL"import yt_dlp
ydl_opts = {
'format': 'bestaudio/best',
'writethumbnail': True,
'postprocessors': [
{
'key': 'FFmpegExtractAudio',
'preferredcodec': 'm4a',
'preferredquality': '0',
},
{'key': 'EmbedThumbnail'},
{'key': 'FFmpegMetadata'},
],
}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
ydl.download(["URL"])嵌入字幕
# 下载字幕并嵌入到视频
yt-dlp --write-sub --embed-subs "URL"
# 嵌入所有可用字幕
yt-dlp --all-subs --embed-subs "URL"
# 嵌入指定语言字幕
yt-dlp --write-sub --sub-lang "zh-Hans,en" --embed-subs "URL"import yt_dlp
ydl_opts = {
'writesubtitles': True,
'subtitleslangs': ['zh-Hans', 'en'],
'postprocessors': [
{'key': 'EmbedSubtitle'},
],
}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
ydl.download(["URL"])视频格式转换
# 转换为 mp4
yt-dlp --recode-video mp4 "URL"
# 下载后合并为 mp4(推荐,比 recode 快)
yt-dlp --merge-output-format mp4 "URL"import yt_dlp
# 合并为 mp4(推荐)
ydl_opts = {
'merge_output_format': 'mp4',
}
# 或使用后处理器转码
ydl_opts_recode = {
'postprocessors': [{
'key': 'FFmpegVideoConvertor',
'preferedformat': 'mp4',
}],
}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
ydl.download(["URL"])SponsorBlock(去广告/赞助)
# 标记赞助片段(在播放器中显示章节)
yt-dlp --sponsorblock-mark all "URL"
# 直接删除赞助片段
yt-dlp --sponsorblock-remove all "URL"
# 只删除赞助商广告
yt-dlp --sponsorblock-remove sponsor "URL"组合多个后处理器
后处理器按照列表顺序依次执行。顺序很重要:先提取音频 → 再嵌入封面 → 最后写元数据。
# 完整的音频下载流水线
ydl_opts = {
'format': 'bestaudio/best',
'outtmpl': '%(uploader)s/%(title)s.%(ext)s',
'writethumbnail': True,
'postprocessors': [
# 1. 提取音频
{
'key': 'FFmpegExtractAudio',
'preferredcodec': 'm4a',
'preferredquality': '0',
},
# 2. 嵌入封面
{'key': 'EmbedThumbnail'},
# 3. 写入元数据
{'key': 'FFmpegMetadata'},
],
}