toMedia
进阶功能

后处理

音频提取、缩略图嵌入、元数据写入等后处理功能

后处理器(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'},
    ],
}

相关页面

On this page