Project Icon

FFMpegCore

灵活高效的.NET多媒体处理库

FFMpegCore是一个基于.NET Standard的FFMpeg/FFProbe封装库,提供简洁的API用于媒体分析和转换。该库支持同步和异步操作,具备流式处理、截图和GIF制作等功能。通过参数构建器,可轻松生成复杂的FFMpeg命令。FFMpegCore跨平台兼容,支持32位和64位环境,适用于各类媒体处理需求。

FFMpegCore

NuGet 徽章 GitHub 问题 GitHub 星标 GitHub CI GitHub 代码贡献者

一个.NET Standard FFMpeg/FFProbe封装器,可以轻松地将媒体分析和转换集成到您的.NET应用程序中。支持同步和异步调用。

API

FFProbe

使用FFProbe分析媒体文件:

var mediaInfo = await FFProbe.AnalyseAsync(inputPath);

var mediaInfo = FFProbe.Analyse(inputPath);

FFMpeg

使用FFMpeg转换您的媒体文件。 使用流畅的参数构建器轻松构建您的FFMpeg参数:

将输入文件转换为h264/aac编码,缩放到720p,带快速启动,用于Web播放

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

从流转换和/或转换到流

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

辅助方法

提供的辅助方法使执行常见操作变得简单。

轻松从视频文件中捕获快照:

// 在内存中处理快照并直接使用Bitmap
var bitmap = FFMpeg.Snapshot(inputPath, new Size(200, 400), TimeSpan.FromMinutes(1));

// 或将图像保存到磁盘
FFMpeg.Snapshot(inputPath, outputPath, new Size(200, 400), TimeSpan.FromMinutes(1));

您还可以从视频文件中捕获GIF快照:

FFMpeg.GifSnapshot(inputPath, outputPath, new Size(200, 400), TimeSpan.FromSeconds(10));

// 或异步
await FFMpeg.GifSnapshotAsync(inputPath, outputPath, new Size(200, 400), TimeSpan.FromSeconds(10));

// 您还可以将Width/Height Size属性之一设置为-1,让FFMPEG在保持纵横比的同时调整大小
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);

将图像与音频文件合并,用于YouTube或类似平台

FFMpeg.PosterWithAudio(inputPath, inputAudioPath, outputPath);
// 或
var image = Image.FromFile(inputImagePath);
image.AddAudio(inputAudioPath, outputPath);

其他可用参数可以在FFMpegCore.Arguments命名空间中找到。

输入管道

通过输入管道,可以直接从程序内存写入视频帧,而无需将它们保存为jpeg或png然后将路径传递给ffmpeg的输入。这个功能还允许在生成或接收帧的同时实时转换视频。

实现IPipeSource接口的对象用作数据源。目前,IPipeSource接口有两种实现:用于流的StreamPipeSource和用于原始视频帧的RawVideoPipeSource

处理原始视频帧

生成位图帧的方法:

IEnumerable<IVideoFrame> CreateFrames(int count)
{
    for(int i = 0; i < count; i++)
    {
        yield return GetNextFrame(); //生成或接收下一帧的方法
    }
}

然后创建一个利用您的视频帧源的RawVideoPipeSource

var videoFramesSource = new RawVideoPipeSource(CreateFrames(64))
{
    FrameRate = 30 //设置源帧率
};
await FFMpegArguments
    .FromPipeInput(videoFramesSource)
    .OutputToFile(outputPath, false, options => options
        .WithVideoCodec(VideoCodec.LibVpx))
    .ProcessAsynchronously();

如果你想将 System.Drawing.Bitmap 用作 IVideoFrame,我们提供了一个 BitmapVideoFrameWrapper 包装类。

二进制文件

安装

如果你更喜欢手动下载,请访问 ffbinarieszeranoe Windows 构建版本

Windows(使用 choco)

命令:choco install ffmpeg -y

位置:C:\ProgramData\chocolatey\lib\ffmpeg\tools\ffmpeg\bin

Mac OSX

命令:brew install ffmpeg mono-libgdiplus

位置:/usr/local/bin

Ubuntu

命令:sudo apt-get install -y ffmpeg libgdiplus

位置:/usr/bin

路径配置

选项1

默认值为空字符串(期望通过 PATH 找到 ffmpeg)可以通过 FFOptions 类进行覆盖:

// 设置全局选项
GlobalFFOptions.Configure(new FFOptions { BinaryFolder = "./bin", TemporaryFilesFolder = "/tmp" });

// 或
GlobalFFOptions.Configure(options => options.BinaryFolder = "./bin");

// 在某些系统上可能需要绝对路径,这种情况下
GlobalFFOptions.Configure(new FFOptions { BinaryFolder = Server.MapPath("./bin"), TemporaryFilesFolder = Server.MapPath("/tmp") });

// 或单独的每次运行选项
await FFMpegArguments
    .FromFileInput(inputPath)
    .OutputToFile(outputPath)
    .ProcessAsynchronously(true, new FFOptions { BinaryFolder = "./bin", TemporaryFilesFolder = "/tmp" });

// 或结合使用,设置全局默认值并调整每次运行选项
GlobalFFOptions.Configure(new FFOptions { BinaryFolder = "./bin", TemporaryFilesFolder = "./globalTmp", WorkingDirectory = "./" });

await FFMpegArguments
    .FromFileInput(inputPath)
    .OutputToFile(outputPath)
    .Configure(options => options.WorkingDirectory = "./CurrentRunWorkingDir")
    .Configure(options => options.TemporaryFilesFolder = "./CurrentRunTmpFolder")
    .ProcessAsynchronously();

选项2

ffmpeg 二进制文件的根目录和临时目录可以通过 ffmpeg.config.json 文件进行配置,该文件仅在首次使用时读取。

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

同时支持32位和64位进程

如果你希望支持多种客户端处理器架构,可以在 BinaryFolder 目录中创建两个文件夹:x64x86。 这两个文件夹都应包含为各自架构构建的二进制文件(ffmpeg.exeffprobe.exe)。

这样做后,库将尝试使用 /{BinaryFolder}/{ARCH}/(ffmpeg|ffprobe).exe

如果未定义这些文件夹,它将尝试在 /{BinaryFolder}/(ffmpeg|ffprobe.exe) 中查找二进制文件。

.exe 仅在 Windows 上添加)

兼容性

旧版本的 ffmpeg 可能不支持本库提供的所有 ffmpeg 参数。该库已经过版本 3.34.2 的测试。

代码贡献者

其他贡献者

许可证

版权所有 © 2023

根据 MIT 许可证 发布

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号