首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用taglib-sharp和Powershell更新歌曲元数据

使用taglib-sharp和Powershell更新歌曲元数据
EN

Stack Overflow用户
提问于 2018-02-21 12:42:55
回答 2查看 2.9K关注 0票数 1

我正在尝试用taglib-sharppowershell更新歌曲元数据。它对大多数文件都很好,但是有些wma文件有错误(我可以播放这些文件)。

代码语言:javascript
复制
# Load the tag-lib assembly
[Reflection.Assembly]::LoadFrom( (Resolve-Path ("D:\zic\lib\taglib-sharp.dll")))

# Load up the song file and its metadata
$path_file="‪D:\zic\misc\Artist_Title.wma"
$song = [TagLib.File]::Create((resolve-path $path_file))
$file_name = [System.IO.Path]::GetFileNameWithoutExtension($path_file) 
$file_name_array=$file_name.Split("_")
$artist=$file_name_array[0]
$title=$file_name_array[1]

#set the artist and title (metadata)
$song.Tag.Artists = $artist 
$song.Tag.AlbumArtists = $artist 
$song.Tag.Title = $title

# Save the metadata 
$song.Save() 

保存文件时出现错误:

这是一个powershell问题吗?taglib-sharp问题?我使用的是taglib_sharp版本2.0.50727和powershell版本5.1.16299.248。

编辑

使用try catch来显示错误:

代码语言:javascript
复制
# Save the metadata
try
{
    $song.Save() 
}
catch [Exception]
{
    Write-Host $_.Exception|format-list -force
}

控制台显示:

编辑2

如果我手动编辑标记(右键单击文件->属性)或重命名该文件,则程序运行时没有问题,标签将被更新。奇怪!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-28 11:21:56

正如@tukan建议的那样,一些标签的长度是问题所在。

让我们展示一首歌的所有标记:

代码语言:javascript
复制
$song = [TagLib.File]::Create((resolve-path $path_file))
foreach ($tag in $song.Tag)
{
    Write-Host "tag:" $tag
}

产出:

代码语言:javascript
复制
tag:
tag: {D1607DBC-E323-4BE2-86A1-48A42A28441E}
tag: 10.00.00.3802
tag: 0.0.0.0000
tag: 0
tag: 2007
tag: 128317523430000000
tag: AMGa_id=R  1411185;AMGp_id=VA;AMGt_id=T 14593744
tag: Éri Tabuhci
tag: Universal
tag: World
tag: Les 100 Plus Grands Tubes Disc 3
tag: Unknown Artist
tag: 14+96+34B7+ADE8+E42D+11DF5+15230+196F2+1C2D1+1FC01+257E9+29612+2D100+30FB0+34ECE+3923F+3D39B+40CF6+454FF+49162+4D5D0+521B0
tag: AMG
tag: World
tag: 5

最后的第四个标签太长,是问题的原因。解决方案是加载文件,删除所有现有标记,保存它,再次加载它,然后设置所需的标记。例如:

代码语言:javascript
复制
$song = [TagLib.File]::Create((resolve-path $path_file))
$song.RemoveTags($song.TagTypes)
$song.Save()

$song = [TagLib.File]::Create((resolve-path $path_file))
$song.Tag.Artists = "blabla"
...

希望这能有所帮助!

票数 5
EN

Stack Overflow用户

发布于 2018-02-28 08:13:06

我基于源代码的猜测是,您达到了ByteVector大小(可能是文件大小或某些列表)限制,即2,147,483,647 - int溢出。

如果.wma文件或列表的文件大小大于2,147,483,647字节,您将得到负数(溢出),从而得到此异常。

您必须使用这个项目在github上打开一张票证,并且他们应该使用有限制long9,223,372,036,854,775,807类型。

当你手动编辑的时候,你不会达到这个限制,所以它是有效的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48906243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档