编辑
2025-11-22
C#
00

目录

简介
准备工作
代码示例
基础缩略图生成
高级缩略图生成
生成多张缩略图
注意事项
总结

简介

Xabe.FFmpeg 是一个优秀的 .NET FFmpeg 封装库,可以帮助我们方便地处理音视频文件。本文将详细介绍如何使用 Xabe.FFmpeg 来生成视频缩略图。

准备工作

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

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

确保系统中已安装 FFmpeg(Xabe.FFmpeg 依赖于 FFmpeg)

代码示例

基础缩略图生成

下面是一个最基本的生成视频缩略图的示例:

C#
using Xabe.FFmpeg; namespace App10 { internal class Program { static async Task Main(string[] args) { FFmpeg.SetExecutablesPath("D:\\Software\\ffmpeg-master-latest-win64-gpl-shared\\bin"); await GenerateBasicThumbnail("D:\\Video\\1.mp4", "D:\\1.jpg"); } public static async Task GenerateBasicThumbnail(string inputPath, string outputPath) { try { // 获取视频信息 IMediaInfo mediaInfo = await FFmpeg.GetMediaInfo(inputPath); // 获取视频时长(秒) double duration = mediaInfo.Duration.TotalSeconds; // 在视频中间位置截取一帧作为缩略图 double snapshotTime = duration / 2; // 生成缩略图 var conversion = await FFmpeg.Conversions.FromSnippet.Snapshot( inputPath, outputPath, TimeSpan.FromSeconds(snapshotTime)); // 执行转换 await conversion.Start(); Console.WriteLine($"缩略图已生成:{outputPath}"); } catch (Exception ex) { Console.WriteLine($"生成缩略图时发生错误:{ex.Message}"); } } } }

高级缩略图生成

这个示例展示了更多自定义选项:

C#
public static async Task GenerateAdvancedThumbnail( string inputPath, string outputPath, int width = 320, int height = 240) { try { // 获取视频信息 IMediaInfo mediaInfo = await FFmpeg.GetMediaInfo(inputPath); // 计算视频 1/3 处的时间点 double snapshotTime = mediaInfo.Duration.TotalSeconds / 3; // 创建转换任务 var conversion = FFmpeg.Conversions.New() // 设置输入文件 .AddParameter($"-i {inputPath}") // 设置截取时间点 .AddParameter($"-ss {snapshotTime}") // 只截取一帧 .AddParameter("-frames:v 1") // 设置输出尺寸 .AddParameter($"-s {width}x{height}") // 设置输出质量(1-31,值越小质量越好) .AddParameter("-q:v 2") // 设置输出路径 .SetOutput(outputPath); // 执行转换 await conversion.Start(); Console.WriteLine($"高级缩略图已生成:{outputPath}"); } catch (Exception ex) { Console.WriteLine($"生成缩略图时发生错误:{ex.Message}"); } }

生成多张缩略图

有时我们需要从视频中提取多张缩略图,下面是具体实现:

C#
using Xabe.FFmpeg; namespace App10 { internal class Program { static async Task Main(string[] args) { FFmpeg.SetExecutablesPath("D:\\Software\\ffmpeg-master-latest-win64-gpl-shared\\bin"); await GenerateMultipleThumbnails("D:\\Video\\1.mp4", "D:\\"); } public static async Task GenerateMultipleThumbnails( string inputPath, string outputDirectory, int thumbnailCount = 3) { try { // 获取视频信息 IMediaInfo mediaInfo = await FFmpeg.GetMediaInfo(inputPath); double duration = mediaInfo.Duration.TotalSeconds; // 确保输出目录存在 Directory.CreateDirectory(outputDirectory); // 计算时间间隔 double interval = duration / (thumbnailCount + 1); // 生成多张缩略图 for (int i = 1; i <= thumbnailCount; i++) { double currentTime = interval * i; string outputPath = Path.Combine( outputDirectory, $"thumbnail_{i}.jpg"); var conversion = await FFmpeg.Conversions.FromSnippet.Snapshot( inputPath, outputPath, TimeSpan.FromSeconds(currentTime)); await conversion.Start(); Console.WriteLine($"已生成第 {i} 张缩略图:{outputPath}"); } } catch (Exception ex) { Console.WriteLine($"生成多张缩略图时发生错误:{ex.Message}"); } } } }

image.png

注意事项

  1. 确保系统已正确安装 FFmpeg,并且可以在命令行中访问
  2. 视频文件路径中不要包含特殊字符
  3. 建议对输出路径进行合法性验证
  4. 处理大文件时要考虑性能问题
  5. 注意异常处理,特别是文件访问相关的异常

总结

Xabe.FFmpeg 提供了一个强大而灵活的方式来生成视频缩略图。通过上述示例,我们可以根据实际需求选择不同的实现方式,从简单的单张缩略图到批量生成多张缩略图都能轻松实现。在实际应用中,记得根据具体场景调整参数,并做好异常处理和性能优化。

本文作者:技术老小子

本文链接:

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