FFmpeg4Sharp 6.1.0
Suggested Alternatives
Additional Details
Versions that should not be released
There is a newer version of this package available.
See the version list below for details.
See the version list below for details.
dotnet add package FFmpeg4Sharp --version 6.1.0
NuGet\Install-Package FFmpeg4Sharp -Version 6.1.0
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="FFmpeg4Sharp" Version="6.1.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add FFmpeg4Sharp --version 6.1.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: FFmpeg4Sharp, 6.1.0"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install FFmpeg4Sharp as a Cake Addin #addin nuget:?package=FFmpeg4Sharp&version=6.1.0 // Install FFmpeg4Sharp as a Cake Tool #tool nuget:?package=FFmpeg4Sharp&version=6.1.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
FFmpeg4Sharp
A FFmpeg.AutoGen Warpper Library.
This is NOT a ffmpeg command-line library.
dev branch is under construction.
FFmpeg API are unstable, please use ffmpeg library version > 5
Usage
Manually download the *.dll files that comply with the license from ffmpeg.org.
NuGet\Install-Package FFmpeg4Sharp
using FFmpeg.AutoGen;
using FFmpegSharp;
Mux and encode
/// Create a video file
var fps = 29.97d;
var width = 800;
var heith = 600;
var output = "path-to-your-output-file.mp4";
using (var muxer = MediaMuxer.Create(output))
{
using (var encoder = MediaEncoder.CreateVideoEncoder(muxer.Format, width, heith, fps, otherSettings: _ => _.ThreadCount = 10))
{
var stream = muxer.AddStream(encoder);
muxer.WriteHeader();
using (var vFrame = MediaFrame.CreateVideoFrame(width, heith, encoder.PixFmt))
{
for (var i = 0; i < 300; i++)
{
// Your code to fill AVFrame.data
vFrame.Pts = i;
foreach (var packet in encoder.EncodeFrame(vFrame))
{
packet.StreamIndex = stream.Index;
muxer.WritePacket(packet, encoder.TimeBase);
}
}
}
muxer.FlushCodecs(new[] { encoder });
muxer.WriteTrailer();
}
}
Demux and decode
/// Video to BGR images
var input = "path-to-your-input-file.mp4";
var output = "path-to-your-output-dir";
using (var demuxer = MediaDemuxer.Open(input))
using (var convert = new PixelConverter())
{
var decoders = demuxer.Select(_ => MediaDecoder.CreateDecoder(_.CodecparRef, _ => _.ThreadCount = 10)).ToList();
foreach (var packet in demuxer.ReadPackets())
{
var decoder = decoders[packet.StreamIndex];
if (decoder != null && decoder.CodecType == FFmpeg.AutoGen.AVMediaType.AVMEDIA_TYPE_VIDEO)
{
convert.SetOpts(decoder.Width, decoder.Height, FFmpeg.AutoGen.AVPixelFormat.AV_PIX_FMT_BGR24);
foreach (var frame in decoder.DecodePacket(packet))
{
// frame is YUV AVFrame
foreach (var bgrframe in convert.Convert(frame))
{
// use opencvsharp save to jpg
//using (var mat = new Mat(bgrframe.Height, bgrframe.Width, MatType.CV_8UC3))
//{
// var srcLineSize = bgrframe.Linesize[0];
// var dstLineSize = (int)mat.Step();
// FFmpegUtil.CopyPlane((IntPtr)bgrframe.Ref.data[0], srcLineSize,
// mat.Data, dstLineSize, Math.Min(srcLineSize, dstLineSize), mat.Height);
// if (frame.PktDts >= 0)
// mat.SaveImage(Path.Combine(output, $"{demuxer[packet.StreamIndex].ToTimeSpan(frame.PktDts).TotalMilliseconds}ms.jpg"));
//}
}
}
}
}
decoders.ForEach(_ => _?.Dispose());
}
More see Example
ROADMAP
- Easy api to cut/seek/mute audio clip.
- Easy api to cut/seek video clip.
- More example and test.
- Filter support.
- Data exchange with NAudio and SharpAVI.
- Subtitle support.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 is compatible. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
.NETStandard 2.0
- FFmpeg.AutoGen (>= 6.1.0)
-
.NETStandard 2.1
- FFmpeg.AutoGen (>= 6.1.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories (1)
Showing the top 1 popular GitHub repositories that depend on FFmpeg4Sharp:
Repository | Stars |
---|---|
b-editor/beutl
Cross-platform video editing (compositing) software.
|