簡體   English   中英

編輯 MP4 文件的視頻元數據標簽

[英]Edit video metadata tags of MP4 files

我想編輯 MP4 文件的以下視頻標簽,如TitleSubtitleRatingComentAuthor 我進行了很多搜索並找到了解決方案Taglib sharp 但 taglib sharp 只編輯標題和評論。 我還探索了 Directshow 和 UltraD3lib,但我的問題仍然存在。 如果有人有示例或任何開源庫,請與我分享。

這是我用來更新我的視頻庫文件的幾個簡短方法 Movie 是一個 POCO 對象,具有名稱、IMDB 編號、文件名、年份.. 屬性 ADOHelper 是我用來簡化 ADO DB/SQL 調用的類 使用代碼下面我的視頻上有以下圖標

在此處輸入圖像描述

當我查看視頻的屬性時,我得到以下信息

在此處輸入圖像描述

    private static void UpdateActors(Movie found, FileInfo movie)
    {
        var sql = $"SELECT n.primaryName FROM Principals p Inner join Names n on p.nconst = n.nconst where tconst = '{found.IMDB}'";
        var table = ADOHelper.ReturnDataTable(Conn, sql, CommandType.Text);
        var value = (from DataRow row in table.Rows select row[0].ToString()).ToList();
        var f = TagLib.File.Create(movie.FullName);
        f.Tag.Artists = value.ToArray();
        f.Tag.AlbumArtists = value.ToArray();
        f.Save();
    }

    private static string UpdateGenre(Movie found, FileInfo movie)
    {
        var returned = string.Empty;
        try
        {
            var sql = $"SELECT Genre FROM TitleGenre where TitleId = '{found.IMDB}' order by sort";
            var table = ADOHelper.ReturnDataTable(Conn, sql, CommandType.Text);
            var f = TagLib.File.Create(movie.FullName);
            f.Tag.Genres = (from DataRow row in table.Rows select row[0].ToString()).ToArray();
            returned = table.Rows[0][0].ToString();
            f.Save();
        }
        catch (Exception e)
        {
            Console.WriteLine(found.FilePath + " : " + e.Message);
        }
        return returned;
    }

    private static int UpdateYear(Movie found, FileInfo movie)
    {
        var returned = 0;
        try
        {
            var f = TagLib.File.Create(movie.FullName);
            var sql = $"SELECT startYear FROM Titles where tconst = '{found.IMDB}'";
            var table = ADOHelper.ReturnDataTable(Conn, sql, CommandType.Text);
            f.Tag.Year = uint.Parse(table.Rows[0][0].ToString());
            returned = (int)f.Tag.Year;
            f.Tag.Title = found.Name;
            f.Save();
        }
        catch (Exception e)
        {
            Console.WriteLine(found.FilePath + " : " + e.Message);
        }
        return returned;
    }

    private static string UpdateName(Movie found, FileInfo movie, string description)
    {
        var returned = string.Empty;
        try
        {
            var f = TagLib.File.Create(movie.FullName);
            f.Tag.Title = description;
            returned = description;
            f.Save();
        }
        catch (Exception e)
        {
            Console.WriteLine(found.FilePath + " : " + e.Message);
        }
        return returned;
    }

    private static void UpdatePicture(Movie found, FileInfo movie)
    {
        try
        {
            var poster = $"{PosterPath}\\{found.IMDB}.jpg";
            if (File.Exists(poster))
            {
                var f = TagLib.File.Create(movie.FullName);
                IPicture picture = new Picture(poster);
                f.Tag.Pictures = new[] { picture };
                f.Save();
            }
            else
            {
                using (var writer = new StreamWriter("G:\\NeedPicture.txt", true))
                    writer.WriteLine($"{found.IMDB} : {found.Name} No Picture");
            }

        }
        catch (Exception e)
        {
            Console.WriteLine(found.FilePath + " : " + e.Message);
        }

    }

希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM