public async Task AudioConvert(AudioConversionItem fileToConvert, CancellationToken cancelToken) { var info = await GetInfo(fileToConvert.InputFile.FullName); IAudioStream audioStream = info.AudioStreams.FirstOrDefault() ?.SetCodec(AudioCodec.libvorbis) ?.SetSampleRate(fileToConvert.SampleRate); if (audioStream.Bitrate > fileToConvert.Bitrate) { audioStream = audioStream.SetBitrate(fileToConvert.Bitrate); } var conversion = FFmpeg.Conversions.New() .AddStream(audioStream) .SetOutput(fileToConvert.OutputPath); if (File.Exists(fileToConvert.OutputPath)) { File.Delete(fileToConvert.OutputPath); } conversion.OnProgress += (sender, args) => { OnProgress?.Invoke(this, fileToConvert, args); }; var result = await conversion.Start(cancelToken); OnConversionDone?.Invoke(this, fileToConvert, result); }
public async Task VideoConvert(ConcurrentQueue <AudioConversionItem> filesToConvert, CancellationToken cancelToken) { while (filesToConvert.TryDequeue(out AudioConversionItem fileToConvert)) { var info = await GetInfo(fileToConvert.InputFile.FullName); IStream audioStream = info.AudioStreams.FirstOrDefault() ?.SetCodec(AudioCodec.vorbis); var conversion = await FFmpeg.Conversions.FromSnippet .ToOgv(fileToConvert.InputFile.FullName, fileToConvert.OutputPath); //ffmpeg -i input.mp4 -c:v libtheora -q:v 7 -c:a libvorbis -q:a 4 intro.ogv conversion.OnProgress += (sender, args) => OnProgress?.Invoke(this, fileToConvert, args); var result = await conversion.Start(cancelToken); OnConversionDone?.Invoke(this, fileToConvert, result); } }