编辑
2025-11-22
C#
00

目录

简介
准备工作
代码示例
基础获取视频信息
获取详细元数据信息
异步方式批量处理视频元数据
总结

简介

Xabe.FFmpeg 是一个优秀的 .NET FFmpeg 封装库,它提供了简单易用的 API 来处理音视频文件。本文将详细介绍如何使用 Xabe.FFmpeg 获取视频的元数据信息。

准备工作

首先需要通过 NuGet 安装 Xabe.FFmpeg 包:

XML
<PackageReference Include="Xabe.FFmpeg" Version="5.2.6" />

image.png

在代码中引入命名空间:

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}"); } } } }

image.png

获取详细元数据信息

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}"); } } } }

image.png

异步方式批量处理视频元数据

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}"); } } } }

image.png

总结

Xabe.FFmpeg 提供了强大而简单的 API 来获取视频元数据。通过本文的示例,你可以:

  • 获取基本的视频信息(时长、大小、编码等)
  • 获取详细的元数据信息
  • 处理多个视频文件
  • 正确处理各种异常情况

希望这些示例和说明能帮助你更好地使用 Xabe.FFmpeg 处理视频元数据!

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!