You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python的yt-dlp手动为下载歌曲指定艺术家元数据?

手动指定yt-dlp下载歌曲的艺术家元数据

你之前使用parse-metadata的方式不符合参数语法,导致无法覆盖艺术家信息。这个参数需要遵循源内容:目标字段的映射规则,用来给指定元数据字段赋值。以下是两种直接有效的实现方式:

方法一:通过FFmpegMetadata后处理器强制设置

直接在FFmpegMetadata后处理器中添加metadata参数,手动指定艺术家(及可选的标题)字段,代码修改如下:

import yt_dlp

def download(song, url):
    # 从传入的song参数拆分艺术家和歌曲名
    artist, title = song.split(' - ', 1)
    ydl_opts = {
        'format': 'm4a/bestaudio/best',
        'verbose': True,
        'outtmpl': f"{song}.%(ext)s",
        'merge-output-format': 'mkv',
        'embed-metadata': True,  # 保留自动获取的其他元数据(如专辑、年份)
        'postprocessors': [
            {
                'key': 'FFmpegExtractAudio',
                'preferredcodec': 'aac'
            },
            {
                'key': 'FFmpegMetadata',
                'metadata': {
                    'artist': artist,  # 强制设置目标艺术家
                    'title': title     # 可选:同步设置歌曲标题
                }
            }
        ]
    }

    with yt_dlp.YoutubeDL(ydl_opts) as ydl:
        ydl.download(url)

download('Daniel Pemberton - Falling Apart',
         'https://www.youtube.com/watch?v=Uhx77_beiso&pp=ygUNZmFsbGluZyBhcGFydA%3D%3D')

方法二:用parse-metadata实现字段赋值

如果坚持使用parse-metadata,需要按照正确语法将自定义值映射到元数据字段:

# 在ydl_opts中替换原parse-metadata行
'parse-metadata': [
    f'{artist}:%(artist)s',  # 将拆分出的艺术家值赋值给元数据artist字段
    f'{title}:%(title)s'     # 可选:同步赋值标题字段
],

关键说明

  • 原写法'parse-metadata': '%(artist)s - %(title)s'无效,因为该参数需要明确的“源→目标”映射关系,而非单纯的格式字符串。
  • embed-metadata会保留yt-dlp自动抓取的其他元数据(如专辑、发行年份),FFmpegMetadata的metadata参数仅覆盖你指定的字段。

内容的提问来源于stack exchange,提问作者Arjun Alwe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 18:50:16