php网站开发进程状态,新的龙岗网站建设,舞台搭建,wordpress免邮箱 注册FFmpeg.NET 是一个封装了 FFmpeg 功能的 .NET 库#xff0c;能够方便地在 C# 项目中处理音视频文件。它支持多种操作#xff0c;包括转码、剪辑、合并、分离音频等。
功能
解析元数据从视频生成缩略图使用以下参数将音频和视频转码为其他格式#xff1a; 码率#xff08;…FFmpeg.NET 是一个封装了 FFmpeg 功能的 .NET 库能够方便地在 C# 项目中处理音视频文件。它支持多种操作包括转码、剪辑、合并、分离音频等。
功能
解析元数据从视频生成缩略图使用以下参数将音频和视频转码为其他格式 码率Bit rate帧率Frame rate分辨率Resolution显示比例Aspect ratio寻址位置Seek position时长Duration采样率Sample rate媒体格式Media format 将媒体转换为物理格式和标准如 标准包括FILM、PAL 和 NTSC媒体包括DVD、DV、DV50、VCD 和 SVCD 支持自定义 FFmpeg 命令行参数在 v2.1.0 中新增支持进度事件通知
一、安装与配置
1. 安装 FFmpeg.NET
第一步老规矩先安装注意包名是xFFmpeg.NET
Install-Package xFFmpeg.NET2. 配置 FFmpeg 可执行文件
FFmpeg.NET 需要调用本地的 FFmpeg 可执行文件因此需要下载并配置 FFmpeg
下载 FFmpegFFmpeg 下载解压并找到 ffmpeg.exeWindows 系统。将 ffmpeg.exe 放到你的项目文件夹或者将其路径添加到环境变量中。 二、主要功能
1. 解析元数据
可以轻松获取视频和音频文件的详细信息如格式、分辨率、帧率等。
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. 从视频生成缩略图
可以从指定时间点提取视频帧作为缩略图。
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. 基本转换
可以将一种格式的视频或音频文件转换为另一种格式。
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 格式。
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. 转码选项
可以设置详细的转码参数如码率、帧率、分辨率等。
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. 视频剪辑
可以从视频中提取特定时间段的内容。
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. 订阅视频处理进度
可以通过事件订阅的方式实时获取视频处理的进度信息。
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 的文档。