0

我正在尝试用 C# 编写一些东西,当给定 wtv 文件的名称时,它将从Title元数据字段中删除“new:”、“premier:”或“repeat:”。我Toub.MediaCenter.Dvrms.dll以前能够读取和写入该字段以及此页面的一些指导

我非常粗略和现成的代码如下:

using Toub.MediaCenter.Dvrms.Metadata;

static void Main(string[] args)
{
    // Load the file and create copy of metadata
    DvrmsMetadataEditor md = new DvrmsMetadataEditor(args[0]);
    Hashtable ht = (Hashtable)md.GetAttributes();

    string title = MetadataEditor.GetMetadataItemAsString(ht, "Title");
    if (!string.IsNullOrEmpty(title))
    {
        // Make a copy of the original title
        string newtitle = title;
        
        // Remove all the common prefixes (basic search & replace for now)
        string[] prefixes = { "new:", "repeat:", "premier:" };
        foreach (string prefix in prefixes)
            newtitle = newtitle.Replace(prefix, "", StringComparison.InvariantCultureIgnoreCase);

        // Remove any leading or trailing spaces
        newtitle = newtitle.Trim();

        if (!String.Equals(title, newtitle))
        {
            // Write out updated title and save
            ht["Title"] = new MetadataItem("Title", newtitle, MetadataItemType.String);
            md.SetAttributes(ht);
        }
    }
}

尽管进行了替换,但一旦md.SetAttributes(ht)调用,WTV 文件中的元数据就会损坏。

这会导致代码在第二次运行时崩溃,并在调用Toub.MediaCenter.Dvrms.Metadata.DvrmsMetadataEditor.GetAttributes().

此外,在 wtv 文件上运行 ffmpeg 报告:

[wtv @ 000001d8ee35cf80] unknown guid 57004d002f004d006500640069006100 {004d0057-002f-004d-6500-640069006100}, expected metadata_guid; remaining metadata entries ignored

然后在 ffmpeg 上显示原始(未更改)Title元数据字段。

有谁知道我可以如何修复我的代码以确保正确保存元数据?

4

0 回答 0