FFMpegCore:.NET 中进行音视频处理解决方案

news/2025/2/26 16:22:51

简介

FFMpegCore 是一个基于 .NET Standard 的 FFMpeg/FFProbe 封装库,用于轻松将媒体分析和转换功能集成到应用程序中。它支持同步和异步调用。

安装和配置

1. 安装库

Install-Package FFMpegCore

FFMpegCore 库本身不包含 FFmpeg 可执行文件,因此需要手动下载并指定其路径。可以从 FFmpeg 官方网站 下载适合操作系统的版本。

2. 配置 FFmpeg 路径

全局配置
GlobalFFOptions.Configure(new FFOptions 
{ 
    BinaryFolder = "./ffmpeg", 
    TemporaryFilesFolder = "/tmp" 
});
单次运行配置
await FFMpegArguments
    .FromFileInput(inputPath)
    .OutputToFile(outputPath)
    .ProcessAsynchronously(true, new FFOptions 
    { 
        BinaryFolder = "./bin", 
        TemporaryFilesFolder = "/tmp" 
    });
通过项目文件配置

.csproj 文件中添加以下内容:

<ItemGroup>
    <Resource Include="ffmpeg\ffmpeg.exe" />
    <Resource Include="ffmpeg\ffplay.exe" />
    <Resource Include="ffmpeg\ffprobe.exe" />
</ItemGroup>
通过配置文件配置

创建 ffmpeg.config.json 文件:

{
    "BinaryFolder": "./bin",
    "TemporaryFilesFolder": "/tmp"
}

API 使用

1. 使用 FFProbe 分析媒体文件

var mediaInfo = await FFProbe.AnalyseAsync(inputPath);
// 或同步方式
var mediaInfo = FFProbe.Analyse(inputPath);

2. 使用 FFMpeg 转换媒体文件

FFMpegArguments
    .FromFileInput(inputPath)
    .OutputToFile(outputPath, false, options => options
        .WithVideoCodec(VideoCodec.LibX264)
        .WithConstantRateFactor(21)
        .WithAudioCodec(AudioCodec.Aac)
        .WithVariableBitrate(4)
        .WithVideoFilters(filterOptions => filterOptions.Scale(VideoSize.Hd))
        .WithFastStart())
    .ProcessSynchronously();

3. 从流中转换或输出到流

await FFMpegArguments
    .FromPipeInput(new StreamPipeSource(inputStream))
    .OutputToPipe(new StreamPipeSink(outputStream), options => options
        .WithVideoCodec("vp9")
        .ForceFormat("webm"))
    .ProcessAsynchronously();

4. 辅助方法

捕获快照
var bitmap = FFMpeg.Snapshot(inputPath, new Size(200, 400), TimeSpan.FromMinutes(1));
// 或保存到磁盘
FFMpeg.Snapshot(inputPath, outputPath, new Size(200, 400), TimeSpan.FromMinutes(1));
捕获 GIF 快照
await FFMpeg.GifSnapshotAsync(inputPath, outputPath, new Size(480, -1), TimeSpan.FromSeconds(10));
合并视频片段
FFMpeg.Join(@"..\joined_video.mp4", @"..\part1.mp4", @"..\part2.mp4", @"..\part3.mp4");
创建子视频
FFMpeg.SubVideo(inputPath, outputPath, TimeSpan.FromSeconds(0), TimeSpan.FromSeconds(30));
将图片序列合并为视频
FFMpeg.JoinImageSequence(@"..\joined_video.mp4", frameRate: 1,
    ImageInfo.FromPath(@"..\1.png"),
    ImageInfo.FromPath(@"..\2.png"),
    ImageInfo.FromPath(@"..\3.png"));
音视频文件
FFMpeg.Mute(inputPath, outputPath);
提取音频轨道
FFMpeg.ExtractAudio(inputPath, outputPath);
添加或替换音频轨道
FFMpeg.ReplaceAudio(inputPath, inputAudioPath, outputPath);
将图片与音频文件结合
FFMpeg.PosterWithAudio(inputPath, inputAudioPath, outputPath);

总结

FFMpegCore 提供了一个强大的接口,用于在 .NET 中执行音视频处理任务,包括转码、裁剪、提取音频等操作。通过安装 FFMpegCore 库并配置 FFmpeg 可执行文件的路径,可以在 C# 应用程序中轻松实现各种音视频处理功能。


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

相关文章

ChatGLM2-6B如何从输入到输出-代码解析(二)

出发点 上一篇解析了Chatglm2-6b的模型架构&#xff0c;并和Chatglm-6b进行对比&#xff0c;但是留下了几个问题&#xff08;哭&#xff09;这一篇的目的是讲明白attention和rotaryEmbedding&#xff0c;解决问题&#xff0c;并实现整体目标&#xff0c;完全替代modeling_chat…

C++学习之C概述、数据类型、进制转换与数据存储

一.C概述 1.什么是C语言 2.C语言发展历史 3.编写C程序--环境搭建 4.编写C程序-第一个C程序 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<stdlib.h> void test01() { system("cls"); printf("…

idea导入新项目pom报错设置

修改项目中各module的java版本 修改maven 执行的java版本 打开Product Structrue 修改一遍module的java版本 清缓存重启idea 先 mvn clean 再刷包下载 以上不生效将项目从maven中移除再引入 操作步骤&#xff1a; 右键项目根路径的pom.xml文件&#xff0c;maven中ignore…

一键导出数据库表到Excel

工作中&#xff0c;我们经常需要将数据库表导出到Excel&#xff0c;通常我们会用数据库编辑器之类的工具提供的导出功能来导出&#xff0c;但是它们的导出功能通常都比较简单。 这篇文章将介绍一种简单易用并且功能强大的导出方法。 新增导出 打开的卢导表工具&#xff0c;新…

第十一章 Kubernetes运维—镜像仓库

目录 一、Harbor介绍 二、Harbor部署 一、Harbor介绍 基于策略的镜像复制&#xff1a;可以在不同的镜像仓库中对镜像进行复制传送&#xff0c;比如我们可以在官方镜像仓库中定义一个策略&#xff0c;让他实时地同步到我们自己的私有镜像仓库中。镜像的漏洞扫描&#xff1a;在我…

MongoDB 数据库简介

MongoDB 数据库简介 引言 随着互联网技术的飞速发展,数据已经成为企业的重要资产。为了高效地管理和处理这些数据,数据库技术应运而生。MongoDB作为一种流行的NoSQL数据库,因其灵活的数据模型和高效的数据处理能力,受到了广泛的关注。本文将为您详细介绍MongoDB的基本概念…

【算法设计与分析】(一)介绍算法与复杂度分析

【算法设计与分析】&#xff08;一&#xff09;介绍算法与复杂度分析 前言一、什么是算法&#xff1f;二、算法的抽象机制三、描述算法四、复杂度分析4.1 时间复杂度4.2 空间复杂度 前言 从搜索引擎的高效检索&#xff0c;到推荐系统的个性化推荐&#xff0c;再到人工智能领域…

索提诺比率(Sortino Ratio):更精准的风险调整收益指标(中英双语)

索提诺比率&#xff08;Sortino Ratio&#xff09;&#xff1a;更精准的风险调整收益指标 &#x1f4c9;&#x1f4ca; &#x1f4cc; 什么是索提诺比率&#xff1f; 在投资分析中&#xff0c;我们通常使用 夏普比率&#xff08;Sharpe Ratio&#xff09; 来衡量风险调整后的…