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

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

安装

第一步,老规矩,先安装

PM> Install-Package MediaToolkit

二、MediaToolkit 的主要功能

1. 解析媒体元数据

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

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

using (var engine = new Engine())
{
engine.GetMetadata(inputFile);
} Console.WriteLine($"Duration: {inputFile.Metadata.Duration}");
Console.WriteLine($"Resolution: {inputFile.Metadata.VideoData?.Resolution}");

输出:Net分享

Duration: 00:00:24.9300000

Video 格式: yuv420p(tv, bt709)

Video 颜色模型: h264 (Main) (avc1 / 0x31637661)

Video 帧的尺寸: 1920x1080

Video BitRateKbs : 5989

Video FPS : 30

2. 生成视频缩略图

从视频中提取缩略图是常见的需求。MediaToolkit 提供了简单的方法来实现这一功能。

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

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. 视频裁剪和分割

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

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/MediaToolkit/MediaToolkit

五、总结

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

MediaToolkit:.NET 开发者的多媒体处理工具的更多相关文章

  1. 推荐几个对Asp.Net开发者比较实用的工具 2

    推荐几个对Asp.Net开发者比较实用的工具.大家有相关工具也可以在评论区留言,一起努力学习. 作为程序员要有挑战精神,大家可以尝试一下这些工具. 已经有篇文章写到了vs的扩展工具,这里不再累赘,请查 ...

  2. 推荐几个对Asp.Net开发者比较实用的工具

    推荐几个对Asp.Net开发者比较实用的工具.大家有相关工具也可以在评论区留言,一起努力学习. 工具 1.Visual stdio Productivity Power tool:visual std ...

  3. Android开发者不可或缺的四大工具

    Android开发者不可或缺的四大工具 android以其极强的开放性吸引着世界各地的开发者去开发各种各样的移动应用开发,而各种SDK更是为各个层次的开发者提供了一个可以尽情展示他们专业技能和创造性的 ...

  4. 23个适合Java开发者的大数据工具和框架

    转自:https://www.yidianzixun.com/article/0Ff4gqZQ?s=9&appid=yidian&ver=3.8.4&utk=6n9c2z37 ...

  5. [转]PHP开发者必须了解的工具—Composer

    本文转自:https://blog.csdn.net/Zhihua_W/article/details/80345973 Composer是PHP 用来管理依赖(dependency)关系的工具.你可 ...

  6. 解放开发者!3款工具实现快速K8S开发

    本文转自Rancher Labs 关注我们,即可第一时间获取K8S教程哦 简 介 时至今日,Kubernetes正在变得越来越重要,不仅仅是运维需要Kubernetes,在开发的世界里Kubernet ...

  7. GUI开发者桌面搜索文件工具

    # - *- coding:utf-8-*-from Tkinter import *import tkMessageBoximport tkFileDialogimport osimport fnm ...

  8. 八款Android 开发者必备的小工具

    Photo from https://www.airpair.com 在做Android 开发过程中,会遇到一些小的问题,虽然自己动手也能解决,但是有了一些小工具,解决这些问题就得心应手了,今天就为大 ...

  9. iOS 开发者必知的 75 个工具(译文)

    原文地址:http://benscheirman.com/2013/08/the-ios-developers-toolbelt (需FQ)   如果你去到一位熟练的木匠的工作室,你总是能发现他/她有 ...

  10. iOS 开发者必不可少的 75 个工具,你都会了吗

    如果你去到一位熟练的木匠的工作室,你总是能发现他/她有一堆工具来完成不同的任务. 软件开发同样如此.你可以从软件开发者如何使用工具中看出他水准如何.有经验的开发者精于使用工具.对你目前所使用的工具不断 ...

随机推荐

  1. 【单片机】初次实验:Keil51的使用

    哔哩哔哩/CSDN/博客园:萌狼蓝天 延时器 delay(int count){ int i,j; for(i=0;i<count;i++){ for(j=0;j<1000;j++); } ...

  2. 这可能是国内Qt/C++界最受欢迎开源项目之一/5.8Kstar/持续迭代更新

    一.前言 本项目大概在2020年开始的,大概在2022年重写了一遍,主要是分门别类存放.本项目主要是QWidget编写的一些开源的demo,支持Qt4.Qt5.Qt6,支持任意系统,预计会有100多个 ...

  3. 【OpenCV】features2d_converters.cpp:2:10: fatal error: common.h: 没有那个文件或目录

    Linux环境下使用opencv的dnn模块调用yolov4遇到的坑(纯CPU)一.问题描述Ubuntu安装opencv4.4,第一次编译完成安装成功,发现编译时少加了几个选项,于是重新编译,结果报如 ...

  4. Cesium 在线地图访问总结

    参考:https://deyihu.github.io/src/maptalks-tileLayercollection/examples/?tdsourcetag=s_pcqq_aiomsg 以下u ...

  5. [转]win10 vue-cli 下载成功,显示 vue不是内部或外部命令,也不是可运行的程序

    vue不是内部或外部命令,也不是可运行的程序 1.安装vue-cli npm install -g @vue/cli 2.查看是否安装成功 vue -V 经过上述步骤,一般在CMD窗口输入" ...

  6. 命名空间“System.Web.UI.Design”中不存在类型或命名空间名称“ControlDesigner”

    命名空间"System.Web.UI.Design"中不存在类型或命名空间名称"ControlDesigner" 命名空间"System.Web.UI ...

  7. LRU的map+双链表实现(Go描述)

    面云账户时候问了LRU,具体实现的方式是map+双链表.Set和Get的时间复杂度都是O(1).完整写一遍复习一下, 仅作记录 /** * @Author: lzw5399 * @Date: 2021 ...

  8. 【狂神说Java】Java零基础学习笔记-Java基础

    [狂神说Java]Java零基础学习笔记-Java基础 Java基础01:注释 平时我们编写代码,在代码量比较少的时候,我们还可以看懂自己写的,但是当项目结构一旦复杂起来,我们就需要用到注释了. 注释 ...

  9. vue+element项目部署到线上,所有icon图标不显示,解决方案

    build里边utils.js加publicPath if (options.extract) { return ExtractTextPlugin.extract({ use: loaders, f ...

  10. 聊一聊 C#异步 任务延续的三种底层玩法

    一:背景 1. 讲故事 最近聊了不少和异步相关的话题,有点疲倦了,今天再写最后一篇作为近期这类话题的一个封笔吧,下篇继续写我熟悉的 生产故障 系列,突然亲切感油然而生,哈哈,免费给别人看程序故障,是一 ...