使用 Python 和音乐标签更新 MP3 元数据

问题描述 投票:0回答:1

我正在尝试使用 Python 3 脚本使用音乐标签 (0.4.3) 来编辑 MP3(和其他)文件的元数据,但成功与否。我说“混合”是因为它适用于某些领域,但不适用于其他领域。

我想知道这是否与我如何使用字段名称(大写等)或我传递给它们的值的格式有关,但是我也找不到任何好的和清晰的文档对于音乐标签或标准本身来阐明这一点。

为了用示例演示该问题,我首先使用 Mediainfo 在进行任何编辑之前查看文件的元数据:

'''
General
Complete name                            : Rossini - William Tell Overture (Fritz Reiner).mp3
Format                                   : MPEG Audio
File size                                : 1.19 MiB
Duration                                 : 1 min 2 s
Overall bit rate mode                    : Constant
Overall bit rate                         : 160 kb/s
Album                                    : Rossini - Ouvertüren
Part/Position                            : 1
Part/Total                               : 1
Track name                               : REINER Wm Tell Over
Track name/Position                      : 6
Track name/Total                         : 6
Performer                                : Fritz Reiner: Chicago Symphony Orchestra
Composer                                 : Gioacchino Rossini/Gioachino Antonio Rossini
Encoded by                               : iTunes 9.0.1
Genre                                    : Classical
Recorded date                            : 1958
iTunPGAP                                 : 0

Audio
Format                                   : MPEG Audio
Format version                           : Version 1
Format profile                           : Layer 3
Format settings                          : Joint stereo / MS Stereo
Duration                                 : 1 min 2 s
Bit rate mode                            : Constant
Bit rate                                 : 160 kb/s
Channel(s)                               : 2 channels
Sampling rate                            : 44.1 kHz
Frame rate                               : 38.281 FPS (1152 SPF)
Compression mode                         : Lossy
Stream size                              : 1.18 MiB (100%)'''

然后,我尝试通过创建一个字典并使用它来更新带有音乐标签的文件来更新多个字段

import music_tag as mtag
from music_tag.id3 import mutagen
from mutagen.id3 import TLAN

metadata_updates = {
    "artist": "Rossini",
    "album": "Rossini - Overtures",
    "year": "1829",
    "genre": "Classical music",
    "Publisher": "RCA Victor Red Seal",
    "Copyright": "Creative Commons Attribution-ShareAlike 4.0 License (Public Domain - Non-PD US)",
    "comment": "Test comment",
    "language": "French",
    "tracknumber": 1,
    "totaltracks": 6,
    "tracktitle": "Rossini - William Tell Overture (Fritz Reiner)",
    "short_title": "William Tell Overture",
    "date": "22 November 1958"
}

f = mtag.load_file("Rossini - William Tell Overture (Fritz Reiner).mp3")
for key in metadata_updates:
    try:
        f[key] = metadata_updates[key]
    except:
        pass

f.save()

# Output
Error when trying to update Publisher:
'publisher'
Error when trying to update Copyright:
'copyright'
Error when trying to update language:
'language'
Error when trying to update date:
'date'

此后,某些字段会按预期更新,但其他字段则不会(请参阅错误)。对于出版商版权语言,如果

  • 我用VLC打开文件
  • 打开元数据窗口
  • 手动更新 VLC 窗口中的这些字段
  • 单击保存元数据

当文件重新打开时,它们会被保存并出现在 VLC 中以及 Mediainfo 中。

另外,运行中好像有别名;例如,艺术家(VLC 中使用的术语)似乎变成了表演者

下面的屏幕截图显示了三种状态下 Mediainfo 输出的比较(原始版本、Python 更新后、使用 VLC 进行额外手动更新后)。

diff of metadata between original, Python update and manual update with VLC

在一天结束时,我正在尝试找出如何正确地做到这一点。一个好的起点是显示所有有效字段和别名以及输入值的任何相关限制/规范的列表/参考。

任何其他有用的建议也将不胜感激!

python metadata mp3 vlc
1个回答
0
投票

项目首页列出了所有可用字段。事实上,如果您使用

vars(f)
,您将看到文档中的所有内容。

看起来版权等不存在。也许您可以侵入

TAG_MAP_ENTRY
并注册这些字段。

© www.soinside.com 2019 - 2024. All rights reserved.