Xabe.FFmpeg 是一个优秀的 .NET FFmpeg 封装库,它提供了简单易用的 API 来处理音视频文件。本文将详细介绍如何使用 Xabe.FFmpeg 获取视频的元数据信息。
首先需要通过 NuGet 安装 Xabe.FFmpeg 包:
XML<PackageReference Include="Xabe.FFmpeg" Version="5.2.6" />

在代码中引入命名空间:
C#using Xabe.FFmpeg;
C#using Xabe.FFmpeg;
namespace App09
{
internal class Program
{
static async Task Main(string[] args)
{
// 设置 FFmpeg 路径
FFmpeg.SetExecutablesPath("D:\\Software\\ffmpeg-master-latest-win64-gpl-shared\\bin");
await GetBasicVideoInfo("D:\\Video\\1.mp4");
}
public static async Task GetBasicVideoInfo(string videoPath)
{
try
{
// 获取媒体信息
IMediaInfo mediaInfo = await FFmpeg.GetMediaInfo(videoPath);
// 获取视频基本信息
Console.WriteLine($"视频时长: {mediaInfo.Duration}");
Console.WriteLine($"视频大小: {new FileInfo(videoPath).Length / 1024 / 1024} MB");
// 获取视频流信息
var videoStream = mediaInfo.VideoStreams.FirstOrDefault();
if (videoStream != null)
{
Console.WriteLine($"视频编码: {videoStream.Codec}");
Console.WriteLine($"视频分辨率: {videoStream.Width}x{videoStream.Height}");
Console.WriteLine($"视频帧率: {videoStream.Framerate}");
Console.WriteLine($"视频比特率: {videoStream.Bitrate}");
}
// 获取音频流信息
var audioStream = mediaInfo.AudioStreams.FirstOrDefault();
if (audioStream != null)
{
Console.WriteLine($"音频编码: {audioStream.Codec}");
Console.WriteLine($"音频采样率: {audioStream.SampleRate}");
Console.WriteLine($"音频声道数: {audioStream.Channels}");
Console.WriteLine($"音频比特率: {audioStream.Bitrate}");
}
}
catch (Exception ex)
{
Console.WriteLine($"获取视频信息失败: {ex.Message}");
}
}
}
}

C#using Xabe.FFmpeg;
namespace App09
{
internal class Program
{
static async Task Main(string[] args)
{
FFmpeg.SetExecutablesPath("D:\\Software\\ffmpeg-master-latest-win64-gpl-shared\\bin");
await GetDetailedMetadata("D:\\Video\\1.mp4");
}
public static async Task GetDetailedMetadata(string videoPath)
{
try
{
IMediaInfo mediaInfo = await FFmpeg.GetMediaInfo(videoPath);
// 获取视频流详细信息
foreach (var videoStream in mediaInfo.VideoStreams)
{
Console.WriteLine("\n视频流信息:");
Console.WriteLine($"索引: {videoStream.Index}");
Console.WriteLine($"编码器: {videoStream.Codec}");
Console.WriteLine($"像素格式: {videoStream.PixelFormat}");
Console.WriteLine($"视频旋转角度: {videoStream.Rotation}");
Console.WriteLine($"视频比例: {videoStream.Ratio}");
Console.WriteLine($"是否默认流: {videoStream.Default}");
Console.WriteLine($"分辨率: {videoStream.Width}x{videoStream.Height}");
Console.WriteLine($"帧率: {videoStream.Framerate}");
Console.WriteLine($"比特率: {videoStream.Bitrate}");
}
// 获取音频流详细信息
foreach (var audioStream in mediaInfo.AudioStreams)
{
Console.WriteLine("\n音频流信息:");
Console.WriteLine($"索引: {audioStream.Index}");
Console.WriteLine($"编码器: {audioStream.Codec}");
Console.WriteLine($"是否默认流: {audioStream.Default}");
Console.WriteLine($"采样率: {audioStream.SampleRate}");
Console.WriteLine($"声道数: {audioStream.Channels}");
Console.WriteLine($"比特率: {audioStream.Bitrate}");
}
// 输出基本文件信息
Console.WriteLine("\n基本文件信息:");
Console.WriteLine($"时长: {mediaInfo.Duration}");
Console.WriteLine($"文件大小: {new FileInfo(videoPath).Length / 1024 / 1024} MB");
Console.WriteLine($"格式: {Path.GetExtension(videoPath)}");
}
catch (Exception ex)
{
Console.WriteLine($"获取详细元数据失败: {ex.Message}");
Console.WriteLine($"异常堆栈: {ex.StackTrace}");
}
}
}
}

C#using Xabe.FFmpeg;
namespace App09
{
internal class Program
{
static async Task Main(string[] args)
{
FFmpeg.SetExecutablesPath("D:\\Software\\ffmpeg-master-latest-win64-gpl-shared\\bin");
await ProcessMultipleVideos(new List<string> { "D:\\Video\\1.mp4", "D:\\Video\\2.mp4" });
}
public static async Task ProcessMultipleVideos(List<string> videoPaths)
{
try
{
// 创建并行处理任务
var tasks = videoPaths.Select(async videoPath =>
{
try
{
var mediaInfo = await FFmpeg.GetMediaInfo(videoPath);
return new
{
Path = videoPath,
Info = mediaInfo,
Success = true,
Error = string.Empty
};
}
catch (Exception ex)
{
return new
{
Path = videoPath,
Info = (IMediaInfo)null,
Success = false,
Error = ex.Message
};
}
});
// 等待所有任务完成
var results = await Task.WhenAll(tasks);
// 处理结果
foreach (var result in results)
{
if (result.Success)
{
Console.WriteLine($"\n处理文件: {result.Path}");
Console.WriteLine($"时长: {result.Info.Duration}");
Console.WriteLine($"视频流数量: {result.Info.VideoStreams.Count()}");
Console.WriteLine($"音频流数量: {result.Info.AudioStreams.Count()}");
}
else
{
Console.WriteLine($"\n处理文件失败: {result.Path}");
Console.WriteLine($"错误信息: {result.Error}");
}
}
}
catch (Exception ex)
{
Console.WriteLine($"批量处理视频失败: {ex.Message}");
}
}
}
}

Xabe.FFmpeg 提供了强大而简单的 API 来获取视频元数据。通过本文的示例,你可以:
希望这些示例和说明能帮助你更好地使用 Xabe.FFmpeg 处理视频元数据!
本文作者:技术老小子
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!