mirror of
https://github.com/rosenbjerg/FFMpegCore.git
synced 2024-11-10 08:34:12 +01:00
Add examples from readme
This commit is contained in:
parent
2be7600576
commit
cbf241ca3c
3 changed files with 142 additions and 0 deletions
12
FFMpegCore.Examples/FFMpegCore.Examples.csproj
Normal file
12
FFMpegCore.Examples/FFMpegCore.Examples.csproj
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<TargetFramework>net5.0</TargetFramework>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\FFMpegCore\FFMpegCore.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
124
FFMpegCore.Examples/Program.cs
Normal file
124
FFMpegCore.Examples/Program.cs
Normal file
|
@ -0,0 +1,124 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.IO;
|
||||||
|
using FFMpegCore;
|
||||||
|
using FFMpegCore.Enums;
|
||||||
|
using FFMpegCore.Pipes;
|
||||||
|
using FFMpegCore.Extend;
|
||||||
|
|
||||||
|
var inputPath = "/path/to/input";
|
||||||
|
var outputPath = "/path/to/output";
|
||||||
|
|
||||||
|
{
|
||||||
|
var mediaInfo = FFProbe.Analyse(inputPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
var mediaInfo = await FFProbe.AnalyseAsync(inputPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// process the snapshot in-memory and use the Bitmap directly
|
||||||
|
var bitmap = FFMpeg.Snapshot(inputPath, new Size(200, 400), TimeSpan.FromMinutes(1));
|
||||||
|
|
||||||
|
// or persists the image on the drive
|
||||||
|
FFMpeg.Snapshot(inputPath, outputPath, new Size(200, 400), TimeSpan.FromMinutes(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
var inputStream = new MemoryStream();
|
||||||
|
var outputStream = new MemoryStream();
|
||||||
|
|
||||||
|
{
|
||||||
|
await FFMpegArguments
|
||||||
|
.FromPipeInput(new StreamPipeSource(inputStream))
|
||||||
|
.OutputToPipe(new StreamPipeSink(outputStream), options => options
|
||||||
|
.WithVideoCodec("vp9")
|
||||||
|
.ForceFormat("webm"))
|
||||||
|
.ProcessAsynchronously();
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
FFMpeg.Join(@"..\joined_video.mp4",
|
||||||
|
@"..\part1.mp4",
|
||||||
|
@"..\part2.mp4",
|
||||||
|
@"..\part3.mp4"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
var inputAudioPath = "/path/to/input/audio";
|
||||||
|
{
|
||||||
|
FFMpeg.ReplaceAudio(inputPath, inputAudioPath, outputPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
var inputImagePath = "/path/to/input/image";
|
||||||
|
{
|
||||||
|
FFMpeg.PosterWithAudio(inputPath, inputAudioPath, outputPath);
|
||||||
|
// or
|
||||||
|
var image = Image.FromFile(inputImagePath);
|
||||||
|
image.AddAudio(inputAudioPath, outputPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
IVideoFrame GetNextFrame() => throw new NotImplementedException();
|
||||||
|
{
|
||||||
|
IEnumerable<IVideoFrame> CreateFrames(int count)
|
||||||
|
{
|
||||||
|
for(int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
yield return GetNextFrame(); //method of generating new frames
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var videoFramesSource = new RawVideoPipeSource(CreateFrames(64)) //pass IEnumerable<IVideoFrame> or IEnumerator<IVideoFrame> to constructor of RawVideoPipeSource
|
||||||
|
{
|
||||||
|
FrameRate = 30 //set source frame rate
|
||||||
|
};
|
||||||
|
await FFMpegArguments
|
||||||
|
.FromPipeInput(videoFramesSource)
|
||||||
|
.OutputToFile(outputPath, false, options => options
|
||||||
|
.WithVideoCodec(VideoCodec.LibVpx))
|
||||||
|
.ProcessAsynchronously();
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// setting global options
|
||||||
|
GlobalFFOptions.Configure(new FFOptions { BinaryFolder = "./bin", TemporaryFilesFolder = "/tmp" });
|
||||||
|
// or
|
||||||
|
GlobalFFOptions.Configure(options => options.BinaryFolder = "./bin");
|
||||||
|
|
||||||
|
// or individual, per-run options
|
||||||
|
await FFMpegArguments
|
||||||
|
.FromFileInput(inputPath)
|
||||||
|
.OutputToFile(outputPath)
|
||||||
|
.ProcessAsynchronously(true, new FFOptions { BinaryFolder = "./bin", TemporaryFilesFolder = "/tmp" });
|
||||||
|
}
|
|
@ -7,6 +7,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFMpegCore", "FFMpegCore\FF
|
||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FFMpegCore.Test", "FFMpegCore.Test\FFMpegCore.Test.csproj", "{F20C8353-72D9-454B-9F16-3624DBAD2328}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FFMpegCore.Test", "FFMpegCore.Test\FFMpegCore.Test.csproj", "{F20C8353-72D9-454B-9F16-3624DBAD2328}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFMpegCore.Examples", "FFMpegCore.Examples\FFMpegCore.Examples.csproj", "{3125CF91-FFBD-4E4E-8930-247116AFE772}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
@ -21,6 +23,10 @@ Global
|
||||||
{F20C8353-72D9-454B-9F16-3624DBAD2328}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{F20C8353-72D9-454B-9F16-3624DBAD2328}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{F20C8353-72D9-454B-9F16-3624DBAD2328}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{F20C8353-72D9-454B-9F16-3624DBAD2328}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{F20C8353-72D9-454B-9F16-3624DBAD2328}.Release|Any CPU.Build.0 = Release|Any CPU
|
{F20C8353-72D9-454B-9F16-3624DBAD2328}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{3125CF91-FFBD-4E4E-8930-247116AFE772}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{3125CF91-FFBD-4E4E-8930-247116AFE772}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{3125CF91-FFBD-4E4E-8930-247116AFE772}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{3125CF91-FFBD-4E4E-8930-247116AFE772}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|
Loading…
Reference in a new issue