public async Task ConvertVideo(Video video) { try { video.ConversionStatus = ConversionStatus.Processing; _videoService.Update(video); var filePath = Path.Combine(Directory.GetCurrentDirectory(), "UploadedFiles", "Videos", video.VideoName); var mediaInfo = await FFmpeg.GetMediaInfo(filePath); var fileName = Path.GetFileNameWithoutExtension(filePath); var frameWidth = mediaInfo.VideoStreams.First().Width; var outputFolder = Path.Combine(Directory.GetCurrentDirectory(), "UploadedFiles", "VideoConverts"); if (!Directory.Exists(outputFolder)) { Directory.CreateDirectory(outputFolder); } if (frameWidth > 320) { var convertedName = fileName + "_320" + Path.GetExtension(filePath); var outputPath = Path.Combine(outputFolder, convertedName); IStream videoStream = mediaInfo.VideoStreams.FirstOrDefault() ?.SetSize(VideoSize.Hvga); IStream audioStream = mediaInfo.AudioStreams.FirstOrDefault() ?.SetCodec(AudioCodec.aac); await FFmpeg.Conversions.New() .AddStream(audioStream, videoStream) .SetOutput(outputPath) .Start(); _videoService.AddConvertedVideo(video.Id, 320, outputPath); } if (frameWidth > 480) { var convertedName = fileName + "_480" + Path.GetExtension(filePath); var outputPath = Path.Combine(outputFolder, convertedName); IStream videoStream = mediaInfo.VideoStreams.FirstOrDefault() ?.SetSize(VideoSize.Hd480); IStream audioStream = mediaInfo.AudioStreams.FirstOrDefault() ?.SetCodec(AudioCodec.aac); await FFmpeg.Conversions.New() .AddStream(audioStream, videoStream) .SetOutput(outputPath) .Start(); _videoService.AddConvertedVideo(video.Id, 480, outputPath); } if (frameWidth > 720) { var convertedName = fileName + "_720" + Path.GetExtension(filePath); var outputPath = Path.Combine(outputFolder, convertedName); IStream videoStream = mediaInfo.VideoStreams.FirstOrDefault() ?.SetSize(VideoSize.Hd720); IStream audioStream = mediaInfo.AudioStreams.FirstOrDefault() ?.SetCodec(AudioCodec.aac); await FFmpeg.Conversions.New() .AddStream(audioStream, videoStream) .SetOutput(outputPath) .Start(); _videoService.AddConvertedVideo(video.Id, 720, outputPath); } if (frameWidth > 1080) { var convertedName = fileName + "_1080" + Path.GetExtension(filePath); var outputPath = Path.Combine(outputFolder, convertedName); IStream videoStream = mediaInfo.VideoStreams.FirstOrDefault() ?.SetSize(VideoSize.Hd1080); IStream audioStream = mediaInfo.AudioStreams.FirstOrDefault() ?.SetCodec(AudioCodec.aac); await FFmpeg.Conversions.New() .AddStream(audioStream, videoStream) .SetOutput(outputPath) .Start(); _videoService.AddConvertedVideo(video.Id, 1080, outputPath); } video.ConversionStatus = ConversionStatus.Done; _videoService.Update(video); } catch (Exception e) { video.ConversionStatus = ConversionStatus.Failed; _videoService.Update(video); Console.WriteLine(e); throw; } }