mirror of
https://github.com/rosenbjerg/FFMpegCore.git
synced 2024-11-10 08:34:12 +01:00
Make output file existence check optional
This commit is contained in:
parent
7406cd0fa2
commit
d1a1864aa1
2 changed files with 16 additions and 17 deletions
|
@ -88,7 +88,7 @@ public Bitmap Snapshot(VideoInfo source, FileInfo output, Size? size = null, Tim
|
||||||
new OutputArgument(output)
|
new OutputArgument(output)
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!RunProcess(container, output))
|
if (!RunProcess(container, output, false))
|
||||||
{
|
{
|
||||||
throw new OperationCanceledException("Could not take snapshot!");
|
throw new OperationCanceledException("Could not take snapshot!");
|
||||||
}
|
}
|
||||||
|
@ -198,7 +198,7 @@ public VideoInfo PosterWithAudio(FileInfo image, FileInfo audio, FileInfo output
|
||||||
new ShortestArgument(true),
|
new ShortestArgument(true),
|
||||||
new OutputArgument(output)
|
new OutputArgument(output)
|
||||||
);
|
);
|
||||||
if (!RunProcess(container, output))
|
if (!RunProcess(container, output, false))
|
||||||
{
|
{
|
||||||
throw new FFMpegException(FFMpegExceptionType.Operation,
|
throw new FFMpegException(FFMpegExceptionType.Operation,
|
||||||
"An error occured while adding the audio file to the image.");
|
"An error occured while adding the audio file to the image.");
|
||||||
|
@ -274,7 +274,7 @@ public VideoInfo JoinImageSequence(FileInfo output, double frameRate = 30, param
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (!RunProcess(container, output))
|
if (!RunProcess(container, output, false))
|
||||||
{
|
{
|
||||||
throw new FFMpegException(FFMpegExceptionType.Operation,
|
throw new FFMpegException(FFMpegExceptionType.Operation,
|
||||||
"Could not join the provided image sequence.");
|
"Could not join the provided image sequence.");
|
||||||
|
@ -346,7 +346,7 @@ public FileInfo ExtractAudio(VideoInfo source, FileInfo output)
|
||||||
new OutputArgument(output)
|
new OutputArgument(output)
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!RunProcess(container, output))
|
if (!RunProcess(container, output, false))
|
||||||
{
|
{
|
||||||
throw new FFMpegException(FFMpegExceptionType.Operation,
|
throw new FFMpegException(FFMpegExceptionType.Operation,
|
||||||
"Could not extract the audio from the requested video.");
|
"Could not extract the audio from the requested video.");
|
||||||
|
@ -381,24 +381,24 @@ public VideoInfo ReplaceAudio(VideoInfo source, FileInfo audio, FileInfo output,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
public VideoInfo Convert(ArgumentContainer arguments)
|
public VideoInfo Convert(ArgumentContainer arguments, bool skipExistsCheck = false)
|
||||||
{
|
{
|
||||||
var (sources, output) = GetInputOutput(arguments);
|
var (sources, output) = GetInputOutput(arguments);
|
||||||
_totalTime = TimeSpan.FromSeconds(sources.Sum(source => source.Duration.TotalSeconds));
|
_totalTime = TimeSpan.FromSeconds(sources.Sum(source => source.Duration.TotalSeconds));
|
||||||
|
|
||||||
if (!RunProcess(arguments, output))
|
if (!RunProcess(arguments, output, skipExistsCheck))
|
||||||
throw new FFMpegException(FFMpegExceptionType.Operation, "Could not replace the video audio.");
|
throw new FFMpegException(FFMpegExceptionType.Conversion, "Could not process file without error");
|
||||||
|
|
||||||
_totalTime = TimeSpan.MinValue;
|
_totalTime = TimeSpan.MinValue;
|
||||||
return new VideoInfo(output);
|
return new VideoInfo(output);
|
||||||
}
|
}
|
||||||
public async Task<VideoInfo> ConvertAsync(ArgumentContainer arguments)
|
public async Task<VideoInfo> ConvertAsync(ArgumentContainer arguments, bool skipExistsCheck = false)
|
||||||
{
|
{
|
||||||
var (sources, output) = GetInputOutput(arguments);
|
var (sources, output) = GetInputOutput(arguments);
|
||||||
_totalTime = TimeSpan.FromSeconds(sources.Sum(source => source.Duration.TotalSeconds));
|
_totalTime = TimeSpan.FromSeconds(sources.Sum(source => source.Duration.TotalSeconds));
|
||||||
|
|
||||||
if (!await RunProcessAsync(arguments, output))
|
if (!await RunProcessAsync(arguments, output, skipExistsCheck))
|
||||||
throw new FFMpegException(FFMpegExceptionType.Operation, "Could not replace the video audio.");
|
throw new FFMpegException(FFMpegExceptionType.Conversion, "Could not process file without error");
|
||||||
|
|
||||||
_totalTime = TimeSpan.MinValue;
|
_totalTime = TimeSpan.MinValue;
|
||||||
return new VideoInfo(output);
|
return new VideoInfo(output);
|
||||||
|
@ -438,7 +438,7 @@ public void Stop()
|
||||||
private readonly string _ffmpegPath;
|
private readonly string _ffmpegPath;
|
||||||
private TimeSpan _totalTime;
|
private TimeSpan _totalTime;
|
||||||
|
|
||||||
private bool RunProcess(ArgumentContainer container, FileInfo output)
|
private bool RunProcess(ArgumentContainer container, FileInfo output, bool skipExistsCheck)
|
||||||
{
|
{
|
||||||
_instance?.Dispose();
|
_instance?.Dispose();
|
||||||
var arguments = ArgumentBuilder.BuildArguments(container);
|
var arguments = ArgumentBuilder.BuildArguments(container);
|
||||||
|
@ -447,12 +447,12 @@ private bool RunProcess(ArgumentContainer container, FileInfo output)
|
||||||
_instance.DataReceived += OutputData;
|
_instance.DataReceived += OutputData;
|
||||||
var exitCode = _instance.BlockUntilFinished();
|
var exitCode = _instance.BlockUntilFinished();
|
||||||
|
|
||||||
if (!File.Exists(output.FullName) || new FileInfo(output.FullName).Length == 0)
|
if (!skipExistsCheck && (!File.Exists(output.FullName) || new FileInfo(output.FullName).Length == 0))
|
||||||
throw new FFMpegException(FFMpegExceptionType.Process, string.Join("\n", _instance.ErrorData));
|
throw new FFMpegException(FFMpegExceptionType.Process, string.Join("\n", _instance.ErrorData));
|
||||||
|
|
||||||
return exitCode == 0;
|
return exitCode == 0;
|
||||||
}
|
}
|
||||||
private async Task<bool> RunProcessAsync(ArgumentContainer container, FileInfo output)
|
private async Task<bool> RunProcessAsync(ArgumentContainer container, FileInfo output, bool skipExistsCheck)
|
||||||
{
|
{
|
||||||
_instance?.Dispose();
|
_instance?.Dispose();
|
||||||
var arguments = ArgumentBuilder.BuildArguments(container);
|
var arguments = ArgumentBuilder.BuildArguments(container);
|
||||||
|
@ -461,7 +461,7 @@ private async Task<bool> RunProcessAsync(ArgumentContainer container, FileInfo o
|
||||||
_instance.DataReceived += OutputData;
|
_instance.DataReceived += OutputData;
|
||||||
var exitCode = await _instance.FinishedRunning();
|
var exitCode = await _instance.FinishedRunning();
|
||||||
|
|
||||||
if (!File.Exists(output.FullName) || new FileInfo(output.FullName).Length == 0)
|
if (!skipExistsCheck && (!File.Exists(output.FullName) || new FileInfo(output.FullName).Length == 0))
|
||||||
throw new FFMpegException(FFMpegExceptionType.Process, string.Join("\n", _instance.ErrorData));
|
throw new FFMpegException(FFMpegExceptionType.Process, string.Join("\n", _instance.ErrorData));
|
||||||
|
|
||||||
return exitCode == 0;
|
return exitCode == 0;
|
||||||
|
|
|
@ -10,10 +10,9 @@
|
||||||
<Version>1.0.12</Version>
|
<Version>1.0.12</Version>
|
||||||
<AssemblyVersion>1.1.0.0</AssemblyVersion>
|
<AssemblyVersion>1.1.0.0</AssemblyVersion>
|
||||||
<FileVersion>1.1.0.0</FileVersion>
|
<FileVersion>1.1.0.0</FileVersion>
|
||||||
<PackageReleaseNotes>Add more argument types and make ffprobe output capacity configurable
|
<PackageReleaseNotes>Make output file existence check optional</PackageReleaseNotes>
|
||||||
Update dependency </PackageReleaseNotes>
|
|
||||||
<LangVersion>8</LangVersion>
|
<LangVersion>8</LangVersion>
|
||||||
<PackageVersion>1.3.1</PackageVersion>
|
<PackageVersion>1.3.2</PackageVersion>
|
||||||
<Authors>Vlad Jerca, Malte Rosenbjerg</Authors>
|
<Authors>Vlad Jerca, Malte Rosenbjerg</Authors>
|
||||||
<PackageTags>ffmpeg ffprobe convert video audio mediafile resize analyze muxing</PackageTags>
|
<PackageTags>ffmpeg ffprobe convert video audio mediafile resize analyze muxing</PackageTags>
|
||||||
<RepositoryType>GitHub</RepositoryType>
|
<RepositoryType>GitHub</RepositoryType>
|
||||||
|
|
Loading…
Reference in a new issue