MediaToolkit:.NET 开发者的多媒体处理工具

news/2025/2/26 6:25:47

在开发过程中处理音频和视频文件是许多应用程序的重要功能。MediaToolkit 是一个强大的库,帮助轻松处理这些多媒体文件。封装了 FFmpeg 的功能,使得复杂的任务变得简单。支持更多功能,如视频裁剪、缩略图提取和转码等。

安装

第一步,老规矩,先安装

PM> Install-Package MediaToolkit

主要功能

1. 解析媒体元数据

MediaToolkit 可以解析媒体文件的元数据,视频的时长、分辨率和帧率,以及音频的采样率等。

var inputFile = new MediaFile { Filename = @"Video.flv" };

using (var engine = new Engine())
{
    engine.GetMetadata(inputFile);
}

// 输出视频的基本信息
Console.WriteLine($"Duration: {file.Metadata.Duration}");
Console.WriteLine($"Video 格式: {file.Metadata.VideoData.ColorModel}");
Console.WriteLine($"Video 颜色模型: {file.Metadata.VideoData.Format}");
//表示帧的尺寸,可能是像素大小,例如 "1920x1080",通常用于表示视频的分辨率
Console.WriteLine($"Video 帧的尺寸: {file.Metadata.VideoData.FrameSize}");
//表示比特率,单位为 Kbps(千比特每秒)。
//一个可为空的整数(int?),表示可以没有设置该值,适用于某些不强制要求比特率的情况下。
Console.WriteLine($"Video BitRateKbs : {file.Metadata.VideoData.BitRateKbs}");
//表示每秒帧数(Frames Per Second,FPS),通常用于视频流的播放速率,例如 30.0 表示每秒播放 30 帧
Console.WriteLine($"Video FPS : {file.Metadata.VideoData.Fps}");

输出:Net分享
Duration: 00:00:24.9300000
Video 格式: yuv420p(tv, bt709)
Video 颜色模型: h264 (Main) (avc1 / 0x31637661)
Video 帧的尺寸: 1920x1080
Video BitRateKbs : 5989
Video FPS : 30

2. 生成视频缩略图

从视频中提取缩略图

var inputFile = new MediaFile { Filename = @"Video.flv" };
var outputFile = new MediaFile { Filename = @"Save_Image.jpg" };

using (var engine = new Engine())
{
    var options = new ConversionOptions { Seek = TimeSpan.FromSeconds(15) };
    engine.GetThumbnail(inputFile, outputFile, options);
}

Net分享

3. 音频和视频转码

MediaToolkit 支持将音频和视频文件转换为其他格式,允许设置比特率、帧率、分辨率等参数。

var inputFile = new MediaFile { Filename = @"VideoVideo.flv" };
var outputFile = new MediaFile { Filename = @"VideoTo_Save_New_Video.mp4" };

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

using (var engine = new Engine())
{
    engine.Convert(inputFile, outputFile, conversionOptions);
}

4. 转换为物理格式

MediaToolkit 支持将媒体文件转换为特定的物理格式,如 DVD、DV、VCD 等。

var inputFile = new MediaFile { Filename = @"Video.flv" };
var outputFile = new MediaFile { Filename = @"Save_New_DVD.vob" };

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

using (var engine = new Engine())
{
    engine.Convert(inputFile, outputFile, conversionOptions);
}

5. 视频裁剪和分割

允许对视频进行裁剪和分割,提取特定部分。

var inputFile = new MediaFile { Filename = @"Video.flv" };
var outputFile = new MediaFile { Filename = @"Save_ExtractedVideo.flv" };

using (var engine = new Engine())
{
    var options = new ConversionOptions();
    options.CutMedia(TimeSpan.FromSeconds(30), TimeSpan.FromSeconds(25));
    engine.Convert(inputFile, outputFile, options);
}

6. 自定义 FFmpeg 命令

MediaToolkit 支持执行自定义的 FFmpeg 命令行参数

7. 订阅事件

MediaToolkit 提供了事件订阅机制,可以实时获取转换进度和完成信息。

public void StartConverting()
{
    var inputFile = new MediaFile { Filename = @"VideoVideo.flv" };
    var outputFile = new MediaFile { Filename = @"To_Save_New_Video.mp4" };

    using (var engine = new Engine())
    {
        engine.ConvertProgressEvent += ConvertProgressEvent;
        engine.ConversionCompleteEvent += ConversionCompleteEvent;
        engine.Convert(inputFile, outputFile);
    }
}

private void ConvertProgressEvent(object sender, ConvertProgressEventArgs e)
{
    Console.WriteLine($"Converting... Frame: {e.Frame}, Duration: {e.ProcessedDuration}");
}

private void ConversionCompleteEvent(object sender, ConversionCompleteEventArgs e)
{
    Console.WriteLine("Conversion complete!");
}

项目地址

https://github.com/AydinAdn/MediaToolkit

总结

MediaToolkit 是一个功能强大且易于使用的 .NET 多媒体处理库。封装了 FFmpeg 的功能,简化了复杂的多媒体任务。无论是在桌面、Web 还是移动应用程序中,MediaToolkit 都可以帮助高效处理音频和视频文件。


http://www.niftyadmin.cn/n/5868199.html

相关文章

图像处理、数据挖掘、数据呈现

目录 图像处理方法 阈值分割 图像处理方法 图像平滑 图像锐化 图像增强 阈值分割 边缘检测 阈值分割 特征提取 提取边界 区域提取 主成分压缩 POI 多源数据 数据挖掘 多源数据提取 关联度提取 位置集群, 新闻事件, 权限 个人喜好 历史…

Webpack打包过程中如何处理ES6模块的循环依赖?

在 Webpack 打包过程中,ES6 模块的循环依赖问题是一个常见的挑战。循环依赖指的是两个或多个模块相互引用,从而形成一个闭环。在处理循环依赖时,Webpack 采取了一些策略来确保模块能够正确加载。 1. 循环依赖的概念 假设有两个模块 A 和 B&…

B2B订货系统在提升订单处理效率与准确性上,有哪些关键流程与机制?

随着全球电子商务的蓬勃发展,B2B(企业对企业)电子商务成为了促进产业链协同、提高运营效率的重要手段。而B2B订货系统作为企业之间交易的核心平台,已经成为优化订单处理、提升效率与准确性的重要工具。在B2B交易中,及时…

kafka的ACL配置的sasl.kerberos.principal.to.local.rules配置解释

kafka配置acl认证的用户名转换规则 1、Kerberos中的介绍2、自定义sasl user name3、自定义ssl 的用户名4、关于kafka配置kerberos以及开启acl的实践 1、Kerberos中的介绍 Kerberos 关于此配置项的解释 https://web.mit.edu/Kerberos/krb5-latest/doc/admin/conf_files/krb5_co…

学习Flask:Day 1:基础搭建

学习目标&#xff1a;完成第一个Flask应用 # app.py from flask import Flask app Flask(__name__)app.route(/) def home():return <h1>Hello Flask!</h1>app.route(/api/greet/<name>) def greet(name):return {message: fHello {name}!}if __name__ __…

STM32——HAL库开发笔记24(定时器5—超声波测距)(参考来源:b站铁头山羊)

一、原理 本次实验采用HC-SR04超声波传感器&#xff0c;结构及功能如下图 超声波传感器可以用来测距。距离 声速&#xff08;340m/s) *传播时间 / 2。 这个传感器有四个引脚&#xff0c;其中VCC接电源正极&#xff0c;GND接电源负极 &#xff0c; Trig : 用来启动测量 &…

最小化重投影误差求解PnP

问题描述 已知n个空间点 P i [ x i , y i , z i ] T P_i[x_i,y_i,z_i]^T Pi​[xi​,yi​,zi​]T&#xff0c;其投影的像素坐标 p i [ u i , v i ] T p_i[u_i,v_i]^T pi​[ui​,vi​]T求相机的位姿R&#xff0c;T。 问题分析 根据相机模型&#xff0c;像素点和空间点的位置…

BigDecimal线上异常解决方案:避免科学计数法输出的坑

文章目录 问题背景为什么BigDecimal会输出科学计数法&#xff1f;线上异常场景场景1&#xff1a;数据传递异常场景2&#xff1a;日志记录异常场景3&#xff1a;数据存储异常 解决方案1. 使用toPlainString()方法2. 设置格式化输出3. 自定义工具类 代码示例总结 在Java开发中&am…