返回Excel催化剂目录

产品文档 / Excel催化剂

第37波-音视频文件元数据提取(分辨率,时长,采样率等)

上一篇提到图片元信息Exif的提取,当然还有一类音视频文件,也同样存储着许多宝贵的元数据,那就开源到底呗,虽然自己找寻过程也是蛮艰辛坎坷的,大家看后有收获,只求多多传播下,让前人的工作可以更有价值。 此篇对应的Excel催化剂功能实现:第83波 遍历文件夹内文件信息特别是图像、音视频等特有信息 ..

上一篇提到图片元信息Exif的提取,当然还有一类音视频文件,也同样存储着许多宝贵的元数据,那就开源到底呗,虽然自己找寻过程也是蛮艰辛坎坷的,大家看后有收获,只求多多传播下,让前人的工作可以更有价值。

此篇对应的Excel催化剂功能实现:第83波-遍历文件夹内文件信息特别是图像、音视频等特有信息

../功能介绍(按波段)/第83波-遍历文件夹内文件信息特别是图像、音视频等特有信息.md

音视频元数据的提取,用到了MediaToolkit类库,较其他复杂的方案来说,这个对我这种业余开发者最友好,最后很幸运地相遇了它。

内容插图

直接上代码,同样只需三两行代码就可以拿到核心信息。

        private void AddMediaInfo(DataRow dr, string filePath)
        {
            try
            {
                using (var engine = new Engine())
                {
                    var inputFile = new MediaToolkit.Model.MediaFile { Filename = filePath };
                    engine.GetMetadata(inputFile);
                    var videoData = inputFile.Metadata.VideoData;
                    var audioData = inputFile.Metadata.AudioData;
                    dr[ColNameOfVideoDuration] = Math.Round(inputFile.Metadata.Duration.TotalSeconds / 60.0, 2);

                    if (videoData != null)
                    {
                        dr[ColNameOfVideoFormat] = videoData.Format;
                        string sizeStr = videoData.FrameSize;
                        dr[ColNameOfVideoWidth] = sizeStr.Split('x')[0];
                        dr[ColNameOfVideoHeight] = sizeStr.Split('x')[1];
                    }

                    if (audioData != null)
                    {
                        dr[ColNameOfAudioFormat] = audioData.Format;
                        dr[ColNameOfAudioBitRateKbs] = audioData.BitRateKbs;
                        dr[ColNameOfAudioSampleRate] = audioData.SampleRate;
                    }
                }
            }
            catch (Exception)
            {

            }

        }