前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >FFmpeg.NET:NET 平台上的音视频处理利器

FFmpeg.NET:NET 平台上的音视频处理利器

作者头像
郑子铭
发布2025-03-28 13:19:49
发布2025-03-28 13:19:49
4300
代码可运行
举报
运行总次数:0
代码可运行

FFmpeg.NET 是一个封装了 FFmpeg 功能的 .NET 库,能够方便地在 C# 项目中处理音视频文件。它支持多种操作,包括转码、剪辑、合并、分离音频等。

功能
  • • 解析元数据
  • • 从视频生成缩略图
  • • 使用以下参数将音频和视频转码为其他格式:
    • • 码率(Bit rate)
    • • 帧率(Frame rate)
    • • 分辨率(Resolution)
    • • 显示比例(Aspect ratio)
    • • 寻址位置(Seek position)
    • • 时长(Duration)
    • • 采样率(Sample rate)
    • • 媒体格式(Media format)
  • • 将媒体转换为物理格式和标准,如:
    • • 标准包括:FILMPALNTSC
    • • 媒体包括:DVDDVDV50VCDSVCD
  • • 支持自定义 FFmpeg 命令行参数(在 v2.1.0 中新增
  • • 支持进度事件通知

一、安装与配置

1. 安装 FFmpeg.NET

第一步,老规矩,先安装,注意包名是xFFmpeg.NET

代码语言:javascript
代码运行次数:0
运行
复制
Install-Package xFFmpeg.NET
2. 配置 FFmpeg 可执行文件

FFmpeg.NET 需要调用本地的 FFmpeg 可执行文件,因此需要下载并配置 FFmpeg:

  • 下载 FFmpeg:FFmpeg 下载
  • 解压并找到 ffmpeg.exe(Windows 系统)。
  • ffmpeg.exe 放到你的项目文件夹或者将其路径添加到环境变量中

二、主要功能

1. 解析元数据

可以轻松获取视频和音频文件的详细信息,如格式、分辨率、帧率等。

代码语言:javascript
代码运行次数:0
运行
复制
var inputFile = new InputFile(@"C:\Path\To_Video.flv");
var ffmpeg = new Engine("C:\\ffmpeg\\ffmpeg.exe");
var metadata = await ffmpeg.GetMetadataAsync(inputFile,new CancellationToken());

Console.WriteLine($"Format: {metadata.VideoData.Format}");
Console.WriteLine($"ColorModel: {metadata.VideoData.ColorModel}");
Console.WriteLine($"FrameSize: {metadata.VideoData.FrameSize}");
Console.WriteLine($"BitRateKbs: {metadata.VideoData.BitRateKbs}");
Console.WriteLine($"Fps: {metadata.VideoData.Fps}");

// 打印 AudioData 属性
Console.WriteLine($"Audio Format: {metadata.AudioData.Format}");
Console.WriteLine($"Audio BitRateKbs: {metadata.AudioData.BitRateKbs}");
Console.WriteLine($"Audio SampleRateHz: {metadata.AudioData.SampleRate}");
Console.WriteLine($"Audio Channels: {metadata.AudioData.ChannelOutput}");

// 打印 FileInfo 属性
Console.WriteLine($"File FullName: {metadata.FileInfo.FullName}");
Console.WriteLine($"File Size: {metadata.FileInfo.Length} bytes");
Console.WriteLine($"File Name: {metadata.FileInfo.Name}");

输出: Format: h264 (High) (avc1 / 0x31637661) ColorModel: yuv420p(progressive) FrameSize: 1920x1080 BitRateKbs: 1546 Fps: 30 Audio Format: aac (LC) (mp4a / 0x6134706D) Audio BitRateKbs: 2 Audio SampleRateHz: 48000 Hz Audio Channels: stereo File FullName: D:\PrideJoy\PublicCode\FFmpegNETDemo\FFmpegNETDemo\bin\Debug\net8.0\ad84cd6c-ec9d-4464-a1ff-db629d74ec72.mp4 File Size: 7641169 bytes File Name: ad84cd6c-ec9d-4464-a1ff-db629d74ec72.mp4

2. 从视频生成缩略图

可以从指定时间点提取视频帧作为缩略图。

代码语言:javascript
代码运行次数:0
运行
复制
var inputFile = new InputFile(@"C:\Path\To_Video.flv");
var outputFile = new OutputFile(@"C:\Path\To_Save_Image.jpg");

var ffmpeg = new Engine("C:\\ffmpeg\\ffmpeg.exe");
var options = new ConversionOptions { Seek = TimeSpan.FromSeconds(15) };
await ffmpeg.GetThumbnailAsync(inputFile, outputFile, options,new CancellationToken());
3. 基本转换

可以将一种格式的视频或音频文件转换为另一种格式。

代码语言:javascript
代码运行次数:0
运行
复制
var inputFile = new InputFile(@"C:\Path\To_Video.flv");
var outputFile = new OutputFile(@"C:\Path\To_Save_New_Video.mp4");

var ffmpeg = new Engine("C:\\ffmpeg\\ffmpeg.exe");
await ffmpeg.ConvertAsync(inputFile, outputFile);
4. 将媒体转换为物理格式和标准

例如,将 Flash 视频转换为 DVD 格式。

代码语言:javascript
代码运行次数:0
运行
复制
var inputFile = new InputFile(@"C:\Path\To_Video.flv");
var outputFile = new OutputFile(@"C:\Path\To_Save_New_DVD.vob");

var conversionOptions = new ConversionOptions
{
    Target = Target.DVD,
    TargetStandard = TargetStandard.PAL
};

var ffmpeg = new Engine("C:\\ffmpeg\\ffmpeg.exe");
await ffmpeg.ConvertAsync(inputFile, outputFile, conversionOptions);
5. 转码选项

可以设置详细的转码参数,如码率、帧率、分辨率等。

代码语言:javascript
代码运行次数:0
运行
复制
var inputFile = new InputFile(@"C:\Path\To_Video.flv");
var outputFile = new OutputFile(@"C:\Path\To_Save_New_Video.mp4");

var conversionOptions = new ConversionOptions
{
    MaxVideoDuration = TimeSpan.FromSeconds(30),
    VideoAspectRatio = VideoAspectRatio.R16_9,
    VideoSize = VideoSize.Hd1080,
    AudioSampleRate = AudioSampleRate.Hz44100
};

var ffmpeg = new Engine("C:\\ffmpeg\\ffmpeg.exe");
await ffmpeg.ConvertAsync(inputFile, outputFile, conversionOptions);
6. 视频剪辑

可以从视频中提取特定时间段的内容。

代码语言:javascript
代码运行次数:0
运行
复制
var inputFile = new InputFile(@"C:\Path\To_Video.flv");
var outputFile = new OutputFile(@"C:\Path\To_Save_ExtractedVideo.flv");

var ffmpeg = new Engine("C:\\ffmpeg\\ffmpeg.exe");
var options = new ConversionOptions();

// 从第30秒开始,提取25秒长的视频片段
options.CutMedia(TimeSpan.FromSeconds(30), TimeSpan.FromSeconds(25));
await ffmpeg.ConvertAsync(inputFile, outputFile, options);
7. 订阅视频处理进度

可以通过事件订阅的方式实时获取视频处理的进度信息。

代码语言:javascript
代码运行次数:0
运行
复制
public async Task StartConverting()
{
    var inputFile = new InputFile(@"C:\Path\To_Video.flv");
    var outputFile = new OutputFile(@"C:\Path\To_Save_New_Video.mp4");

    var ffmpeg = new Engine("C:\\ffmpeg\\ffmpeg.exe");
    ffmpeg.Progress += OnProgress;
    ffmpeg.Data += OnData;
    ffmpeg.Error += OnError;
    ffmpeg.Complete += OnComplete;
    await ffmpeg.ConvertAsync(inputFile, outputFile);
}

private void OnProgress(object sender, ConversionProgressEventArgs e)
{
    Console.WriteLine("[{0} => {1}] Bitrate: {2}, Fps: {3}, Frame: {4}, ProcessedDuration: {5}, Size: {6} kb, TotalDuration: {7}",
        e.Input.FileInfo.Name, e.Output.FileInfo.Name, e.Bitrate, e.Fps, e.Frame, e.ProcessedDuration, e.SizeKb, e.TotalDuration);
}

private void OnData(object sender, ConversionDataEventArgs e)
{
    Console.WriteLine("[{0} => {1}]: {2}", e.Input.FileInfo.Name, e.Output.FileInfo.Name, e.Data);
}

private void OnComplete(object sender, ConversionCompleteEventArgs e)
{
    Console.WriteLine("Completed conversion from {0} to {1}", e.Input.FileInfo.FullName, e.Output.FileInfo.FullName);
}

private void OnError(object sender, ConversionErrorEventArgs e)
{
    Console.WriteLine("[{0} => {1}]: Error: {2}\n{3}", e.Input.FileInfo.Name, e.Output.FileInfo.Name, e.Exception.ExitCode, e.Exception.InnerException);
}

三、总结

FFmpeg.NET 提供了一套强大的 API,使得在 .NET 平台上进行音视频处理变得简单而高效。无论是格式转换、提取音频、视频剪辑还是获取视频信息,FFmpeg.NET 都能胜任。根据具体需求,还可以利用其自定义命令行参数等功能实现更多高级操作。详细文档和功能请查阅官方文档或 FFmpeg 的文档。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-03-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DotNet NB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 功能
  • 一、安装与配置
    • 1. 安装 FFmpeg.NET
    • 2. 配置 FFmpeg 可执行文件
  • 二、主要功能
    • 1. 解析元数据
    • 2. 从视频生成缩略图
    • 3. 基本转换
    • 4. 将媒体转换为物理格式和标准
    • 5. 转码选项
    • 6. 视频剪辑
    • 7. 订阅视频处理进度
  • 三、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档