/// <summary> /// Конвертирует видео-файл /// </summary> /// <param name="outputPath">Путь к сконвертированному файлу</param> /// <param name="video">Параметры конвертации</param> public void ConvertVideo(string source, string outputPath, VideoConvertSettings video) { var videoStream = GetVideoStream(source); if (videoStream == null) { throw new Exception(Resource.VideoStreamNotFound); } string codecs; //на будущие форматы switch (video.Format) { case VideoFormat.mp4: codecs = "-f mp4"; break; default: codecs = "-f mp4"; break; } if (video.FrameHeight > videoStream.Height) { video.FrameHeight = videoStream.Height; } int width = videoStream.Width * video.FrameHeight / videoStream.Height; if (width % 2 != 0) { width++; } string arguments = string.Format("-i \"{0}\" -y -r {4} -vf \"scale={5}:{1}\" {2} \"{3}\"", source, video.FrameHeight, codecs, outputPath, video.FrameRate, width); var output = Run("ffmpeg", arguments); if (!File.Exists(outputPath)) { throw new Exception(output); } }
/// <summary> /// Обработка видеофайла /// </summary> /// <param name="source">Исходный файл</param> /// <param name="destination">Путь назначения</param> /// <param name="quality">Качество видео (используем пока только 240p) </param> /// <param name="videoFrameRate">Частота кадров видео (используем пока только 24)</param> /// <param name="format">Формат видео (используем пока только mp4)</param> public void ProcessVideo(string source, string destination, VideoQuality quality, int videoFrameRate, VideoFormat format) { string extension = string.Format(".{0}", Enum.GetName(typeof(VideoFormat), format)); string destinationFileName = Path.GetFileNameWithoutExtension(source) + extension; string outputTempFileName = Path.Combine(_tempDirectory, Guid.NewGuid().ToString()); try { if (!Directory.Exists(destination)) { Directory.CreateDirectory(destination); } destinationFileName = Path.Combine(destination, destinationFileName); VideoConvertSettings convSettings = new VideoConvertSettings(quality, videoFrameRate, format); // конвертируем и сохраняем во временном файле _сonverter.ConvertVideo(source, outputTempFileName, convSettings); // upload to storage using (FileStream fileStream = File.OpenRead(outputTempFileName)) { using (FileStream writeStream = System.IO.File.Create(destinationFileName)) { fileStream.CopyTo(writeStream); } } } finally { if (File.Exists(outputTempFileName)) { File.Delete(outputTempFileName); } } }