FFmpeg.NET
FFmpeg.NET copied to clipboard
ConvertAsync never returns
Hi, I am trying to convert a file from .webm format to .gif using streams. I have been testing and the engine works fine if I use files. However, if I use streams, the engine freezes when I call the ConvertAsync function, no event or error is raised in the process. Here is the code that I am using.
I am using the version 7.1.3
Engine ffmpeg = new Engine();
ffmpeg.Progress += OnProgress;
ffmpeg.Data += OnData;
ffmpeg.Error += OnError;
ffmpeg.Complete += OnComplete;
var options = new ConversionOptions
{
ExtraArguments = "-f gif -vf \"fps=30,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" -loop 0 -y"
};
InputFile input = new InputFile("https://statics.memondo.com/p/99/gifs/2010/12/GIF_8818_745f4adf060a4d08bf83f77d6ac899d5_taconazo_magico.webm");
Stream stream = await ffmpeg.ConvertAsync(input, options, default);
@josago97 did you figure out this issue? I am getting the same problem.
No, I had to use ffmpeg directly, without using this library. Here my code:
public async Task<Stream> ConvertToGifAsync(Stream data)
{
MemoryStream output = new MemoryStream();
ProcessStartInfo processInfo = new ProcessStartInfo
{
RedirectStandardInput = true,
RedirectStandardOutput = true,
UseShellExecute = false,
CreateNoWindow = true,
Arguments = "-i pipe: -f gif -vf \"fps=30,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse\" -loop 0 -y pipe:",
FileName = "ffmpeg.exe"
};
using Process process = Process.Start(processInfo);
data.Position = 0;
await data.CopyToAsync(process.StandardInput.BaseStream);
process.StandardInput.Close();
await process.StandardOutput.BaseStream.CopyToAsync(output);
await process.WaitForExitAsync();
return output;
}