示例#1
0
        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));
        }
示例#2
0
        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));
        }