private static string GeneateArgumentsForSingleVideo(MakeMovieRequest request, long fileName, List <string> videoPaths, List <string> audioPaths) { var videoSrc = videoPaths.First(); var audioSrc = audioPaths.First(); var outputFileName = string.Concat(Output, fileName, Constants.OutputExtension); var requestedVideoMetadata = request.Videos.First(); var requestedAudioMetadata = request.Audios.First(); var videoDuration = requestedVideoMetadata.StopClip - requestedVideoMetadata.StartClip; var audioDuration = requestedAudioMetadata.StopClip - requestedAudioMetadata.StartClip; if (videoDuration == default(int)) { videoDuration = int.MaxValue; } if (audioDuration == default(int)) { audioDuration = int.MaxValue; } return(string.Format(Constants.FfmpegArgumentsUnformatted, requestedVideoMetadata.Offset, requestedVideoMetadata.StartClip, videoDuration, videoSrc, requestedAudioMetadata.Offset, requestedAudioMetadata.StartClip, audioDuration, audioSrc, outputFileName)); }
public static string CreateNewMovie(MakeMovieRequest request) { var videoPaths = GetMediaPaths(request.Videos, true); var audioPaths = GetMediaPaths(request.Audios, false); if (videoPaths == null || !videoPaths.Any() || audioPaths == null || !audioPaths.Any()) { // Logging and send unicorns to space return(null); } var fileName = DateTime.UtcNow.ToBinary(); string arguments; if (videoPaths.Count == Constants.MaxAmountOfVideos) { arguments = GeneateArgumentsForMultipleVideos(request, fileName, videoPaths, audioPaths); } else { arguments = GeneateArgumentsForSingleVideo(request, fileName, videoPaths, audioPaths); } Task.Factory.StartNew(() => { var proc = Process.Start(FfmpegPath, arguments); if (proc == null) { return; } proc.WaitForExit(); }).Wait(); return(string.Concat(fileName, Constants.OutputExtension)); }