示例#1
0
        void ConvertFile(string file)
        {
            try
            {
                var ffMpeg      = new NReco.VideoConverter.FFMpegConverter();
                var ffMpegInput = new NReco.VideoConverter.FFMpegInput(file);

                ConvertSettings csettings = new ConvertSettings();
                if (EnableResize.Checked == true)
                {
                    csettings.SetVideoFrameSize((int)Xaxis.Value, (int)Yaxis.Value);
                }


                if (FormatChooser.SelectedIndex == 0)
                {
                    ffMpeg.ConvertMedia(file, ffMpegInput.Format, file + "Converted.avi", Format.avi, csettings);
                }
                else if (FormatChooser.SelectedIndex == 1)
                {
                    ffMpeg.ConvertMedia(file, ffMpegInput.Format, file + "Converted.mp4", Format.mp4, csettings);
                }
                else if (FormatChooser.SelectedIndex == 2)
                {
                    ffMpeg.ConvertMedia(file, ffMpegInput.Format, file + "Converted.m4v", Format.m4v, csettings);
                }
                else if (FormatChooser.SelectedIndex == 3)
                {
                    ffMpeg.ConvertMedia(file, ffMpegInput.Format, file + "Converted.gif", Format.gif, csettings);
                }
                else if (FormatChooser.SelectedIndex == 4)
                {
                    ffMpeg.ConvertMedia(file, ffMpegInput.Format, file + "Converted.mov", Format.mov, csettings);
                }
                else if (FormatChooser.SelectedIndex == 5)
                {
                    ffMpeg.ConvertMedia(file, ffMpegInput.Format, file + "Converted.wmv", Format.wmv, csettings);
                }
                else if (FormatChooser.SelectedIndex == 6)
                {
                    ffMpeg.ConvertMedia(file, ffMpegInput.Format, file + "Converted.swf", Format.swf, csettings);
                }
                else if (FormatChooser.SelectedIndex == 7)
                {
                    ffMpeg.ConvertMedia(file, ffMpegInput.Format, file + "Converted.ogg", Format.ogg, csettings);
                }
                else if (FormatChooser.SelectedIndex == 8)
                {
                    ffMpeg.ConvertMedia(file, ffMpegInput.Format, file + "Converted.mpeg", Format.mpeg, csettings);
                }
                else //Nothing selected? Default to .avi format.
                {
                    ffMpeg.ConvertMedia(file, ffMpegInput.Format, file + "Converted.avi", ffMpegInput.Format, csettings);
                }
            }
            catch (Exception e)
            {
                MessageBox.Show("Exception error has occured:\n" + e.Message.ToString(), Title);
            }
        }
示例#2
0
        public FFMPEGConvert()
        {
            ffMpeg         = new FFMpegConverter();
            ffMpegSettings = new ConvertSettings();
            ffMpegSettings.SetVideoFrameSize(880, 880);
            ffMpegSettings.VideoCodec       = "h264";
            ffMpegSettings.CustomOutputArgs = "-map 0:v -color_range 1 -preset fast -tune animation -profile:v high -vf \"format=yuv420p, setdar=4:3\"";
            ffMpegSettings.VideoFrameRate   = 30;

            //ffMpegSettings.CustomOutputArgs = "-c:v libx264rgb -preset veryslow -tune ssim -s 680x680 -vf setdar=1:1 -pix_fmt bgr0 -r 25";
        }
示例#3
0
        public async Task <ActionResult> Upload(CreatePostViewModel viewModel)
        {
            var success = false;

            if (ModelState.IsValid)
            {
                var countOfAttachments = 0;

                var contentTypeArray = new string[]
                {
                    "video/mp4"
                    //"video/avi",
                    //"application/x-mpegURL",
                    //"video/MP2T",
                    //"video/3gpp",
                    //"video/quicktime",
                    //"video/x-msvideo",
                    //"video/x-ms-wmv"
                };

                //create new post entity
                var post = new Post
                {
                    PlateNumber  = viewModel.PlateNumber,
                    Description  = HttpUtility.HtmlDecode(viewModel.Description),
                    UserID       = User.Identity.GetUserId(),
                    DateUploaded = viewModel.DateUploaded,
                    BranchID     = CurrentUser.BranchID
                };

                // I removed the foreach loop
                // and use this instead since the posted file will always be one
                // and for performance reason
                var item = viewModel.Attachments.FirstOrDefault();

                //check if the item is null
                //or else throw an error
                if (item != null)
                {
                    //check if the content type is an MP4
                    if (!contentTypeArray.Contains(item.ContentType))
                    {
                        ModelState.AddModelError("", "video file must be an mp4 format");

                        return(Json(new { success = success, message = "Video file must be an mp4 format" }));
                    }

                    //increment the count of attachment
                    countOfAttachments++;

                    //get the fileName extension
                    var videoExt = Path.GetExtension(item.FileName);
                    //get the fileName
                    var videoFileName = Path.GetFileName(item.FileName);

                    //set the video path
                    var videoPath = Server.MapPath("~/Uploads/Videos");
                    //set the thumbnail path
                    var thumbnailPath = Server.MapPath("~/Uploads/Thumbnails");

                    //create new entity for each attachment
                    var attachment = new PostAttachment();

                    attachment.PostAttachmentID  = Guid.NewGuid().ToString();
                    attachment.FileName          = attachment.PostAttachmentID + videoExt;
                    attachment.MIMEType          = item.ContentType;
                    attachment.FileSize          = item.ContentLength;
                    attachment.FileUrl           = Path.Combine(videoPath, attachment.FileName);
                    attachment.DateCreated       = viewModel.DateUploaded;
                    attachment.AttachmentNo      = $"Attachment {countOfAttachments.ToString()}";
                    attachment.ThumbnailFileName = attachment.PostAttachmentID + ".jpeg";
                    attachment.ThumbnailUrl      = Path.Combine(thumbnailPath, attachment.ThumbnailFileName);

                    //concatenate the path and the filename
                    var videoToSaveBeforeConvertingPath = Path.Combine(videoPath, videoFileName);

                    //save the video
                    using (var fileStream = System.IO.File.Create(videoToSaveBeforeConvertingPath))
                    {
                        var stream = item.InputStream;
                        stream.CopyTo(fileStream);
                    }

                    //for conversion
                    var ffMpeg = new FFMpegConverter();


                    //Set the path of the exe of FFMpeg
                    ffMpeg.FFMpegToolPath = videoPath;

                    //create a file instance
                    var file = new FileInfo(videoToSaveBeforeConvertingPath);

                    //check if the file exists after saving the video
                    if (file.Exists)
                    {
                        //codec for mp4
                        var convertSettings = new ConvertSettings
                        {
                            AudioCodec = "aac",
                            VideoCodec = "h264"
                        };
                        //set the resolution
                        convertSettings.SetVideoFrameSize(1280, 720);

                        //convert the saved file
                        //attachment.FileUrl is the new output filename
                        ffMpeg.ConvertMedia(videoToSaveBeforeConvertingPath, Format.mp4, attachment.FileUrl, Format.mp4, convertSettings);

                        //get the thumbnail of the video for
                        ffMpeg.GetVideoThumbnail(attachment.FileUrl, attachment.ThumbnailUrl);

                        //Once the conversion is successful delete the original file
                        file.Delete();

                        //add the attachment to post entity
                        post.Attachments.Add(attachment);
                    }
                }


                //find the first attachment
                var attached = post.Attachments.FirstOrDefault();

                //if the attachment is not null save it else throw an error
                if (attached != null)
                {
                    //add the post entity and save
                    _uow.Posts.Add(post);
                    await _uow.SaveChangesAsync();


                    //fetch the end-users who have approval access
                    var claims = await _uow.UserClaims.GetAllByClaimTypeAndValueAsync("Approval", "CanApproveVideo");

                    if (claims.Count > 0)
                    {
                        StringBuilder recipients = new StringBuilder();

                        //loop through and create a semicolon separated values
                        //to be used in sending email notification to the supervisors
                        claims.ForEach(claim =>
                        {
                            recipients.Append(claim.User.Email)
                            .Append(";");
                        });

                        //get the url of the posted video
                        //to be included in the email
                        var url = Request.Url.Scheme + "://" + Request.Url.Authority +
                                  Url.Action("post", new
                        {
                            year    = post.DateUploaded.Year,
                            month   = post.DateUploaded.Month,
                            postID  = post.PostID,
                            plateNo = post.PlateNumber
                        });

                        //send email
                        try
                        {
                            await _mgr.CustomSendEmailAsync(
                                User.Identity.GetUserId(),
                                "New posted video",
                                EmailTemplate.GetTemplate(
                                    CurrentUser,
                                    "Supervisors",
                                    "I have posted a new video. Please see the details for approval.",
                                    url),
                                recipients.ToString());
                        }
                        catch (SmtpException ex)
                        {
                            _uow.AppLogs.Add(new AppLog
                            {
                                Message  = ex.Message,
                                Type     = ex.GetType().Name,
                                Url      = Request.Url.ToString(),
                                Source   = (ex.InnerException != null) ? ex.InnerException.Message : string.Empty,
                                UserName = User.Identity.Name,
                                LogDate  = DateTime.UtcNow
                            });
                            await _uow.SaveChangesAsync();

                            success = true;

                            return(Json(new { success = success, message = "Uploaded successfully" }));
                        }
                    }
                    success = true;

                    return(Json(new { success = success, message = "Uploaded successfully" }));
                }
                ModelState.AddModelError("", "Attached has not been succesfully uploaded");
            }
            return(Json(new { success = success, message = "Something went wrong. Please try again" }));
        }
示例#4
0
        void ConvertFileWithWatermarkOnly(string file)
        {
            try
            {
                using (var srcImage = Image.FromFile(WatermarkFileChooser.FileName))
                {
                    var newWidth  = (int)(WatermarkXsize.Value);
                    var newHeight = (int)(WatermarkYsize.Value);
                    using (var newImage = new Bitmap(newWidth, newHeight))
                        using (var graphics = Graphics.FromImage(newImage))
                        {
                            graphics.SmoothingMode     = SmoothingMode.AntiAlias;
                            graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
                            graphics.PixelOffsetMode   = PixelOffsetMode.HighQuality;
                            graphics.DrawImage(srcImage, new Rectangle(0, 0, newWidth, newHeight));
                            newImage.Save(@"Resized.png", System.Drawing.Imaging.ImageFormat.Png);
                            newImage.Dispose();
                        }
                    srcImage.Dispose();
                }
            }
            catch (Exception e)
            {
                MessageBox.Show("Exception error has occured:\n" + e.Message.ToString(), Title);
            }
            try
            {
                var ffMpeg = new NReco.VideoConverter.FFMpegConverter();

                NReco.VideoConverter.FFMpegInput[] ffMpegInputs = new NReco.VideoConverter.FFMpegInput[] { new FFMpegInput(file), new FFMpegInput(@"Resized.png") };

                ConvertSettings csettings = new ConvertSettings();

                if (ResizeOptions.Enabled == true)
                {
                    csettings.SetVideoFrameSize((int)Xaxis.Value, (int)Yaxis.Value);
                }

                csettings.AudioCodec = "copy";
                string arguement = "-filter_complex \"overlay=" + logoxaxis.Value.ToString() + ":" + logoyaxis.Value.ToString() + "\"";

                csettings.CustomOutputArgs = arguement;


                if (FormatChooser.SelectedIndex == 0)
                {
                    ffMpeg.ConvertMedia(ffMpegInputs, file + "ConvertedWithWatermark.avi", Format.avi, csettings);
                }
                else if (FormatChooser.SelectedIndex == 1)
                {
                    ffMpeg.ConvertMedia(ffMpegInputs, file + "ConvertedWithWatermark.mp4", Format.mp4, csettings);
                }
                else if (FormatChooser.SelectedIndex == 2)
                {
                    ffMpeg.ConvertMedia(ffMpegInputs, file + "ConvertedWithWatermark.mv4", Format.m4v, csettings);
                }
                else if (FormatChooser.SelectedIndex == 3)
                {
                    ffMpeg.ConvertMedia(ffMpegInputs, file + "ConvertedWithWatermark.gif", Format.gif, csettings);
                }
                else if (FormatChooser.SelectedIndex == 4)
                {
                    ffMpeg.ConvertMedia(ffMpegInputs, file + "ConvertedWithWatermark.mov", Format.mov, csettings);
                }
                else if (FormatChooser.SelectedIndex == 5)
                {
                    ffMpeg.ConvertMedia(ffMpegInputs, file + "ConvertedWithWatermark.wmv", Format.wmv, csettings);
                }
                else if (FormatChooser.SelectedIndex == 6)
                {
                    ffMpeg.ConvertMedia(ffMpegInputs, file + "ConvertedWithWatermark.swf", Format.swf, csettings);
                }
                else if (FormatChooser.SelectedIndex == 7)
                {
                    ffMpeg.ConvertMedia(ffMpegInputs, file + "ConvertedWithWatermark.ogg", Format.ogg, csettings);
                }
                else if (FormatChooser.SelectedIndex == 8)
                {
                    ffMpeg.ConvertMedia(ffMpegInputs, file + "ConvertedWithWatermark.mpeg", Format.mpeg, csettings);
                }
                else //Nothing selected? Default to .avi format.
                {
                    ffMpeg.ConvertMedia(ffMpegInputs, file + "ConvertedWithWatermark.avi", Format.avi, csettings);
                }
            }
            catch (Exception e)
            {
                MessageBox.Show("Exception error has occured:\n" + e.Message.ToString(), Title);
            }
        }
示例#5
0
        void ConvertFileWithTextOverlayOnly(string file)
        {
            try
            {
                Font textBrush = new Font(textfont.SelectedItem.ToString(), (int)fontSize.Value);
                //first, create a dummy bitmap just to get a graphics object
                Image    img     = new Bitmap(1, 1);
                Graphics drawing = Graphics.FromImage(img);

                //measure the string to see how big the image needs to be
                SizeF textSize = drawing.MeasureString(OverlayText.Text.ToString(), textBrush);

                //free up the dummy image and old graphics object
                img.Dispose();
                drawing.Dispose();

                //create a new image of the right size
                img = new Bitmap((int)textSize.Width, (int)textSize.Height);

                drawing = Graphics.FromImage(img);

                //paint the background
                drawing.Clear(Color.Transparent);

                string     colorName    = textColour.SelectedItem.ToString();
                int        Transparency = TransparencySlider.Value;
                Color      newColor     = Color.FromArgb(Transparency, Color.FromName(colorName));
                SolidBrush brush        = new SolidBrush(newColor);

                drawing.DrawString(OverlayText.Text.ToString(), textBrush, brush, 0, 0);
                drawing.Save();

                img.Save(@"text.png", System.Drawing.Imaging.ImageFormat.Png);

                textBrush.Dispose();
                drawing.Dispose();
                img.Dispose();
                brush.Dispose();
            }
            catch (Exception e)
            {
                MessageBox.Show("Exception error has occured:\n" + e.Message.ToString(), Title);
            }
            try
            {
                var ffMpeg = new NReco.VideoConverter.FFMpegConverter();

                NReco.VideoConverter.FFMpegInput[] ffMpegInputs = new NReco.VideoConverter.FFMpegInput[] { new FFMpegInput(file), new FFMpegInput(@"text.png") };

                ConvertSettings csettings = new ConvertSettings();

                if (ResizeOptions.Enabled == true)
                {
                    csettings.SetVideoFrameSize((int)Xaxis.Value, (int)Yaxis.Value);
                }

                csettings.AudioCodec = "copy";
                string arguement = "-filter_complex \"overlay=" + textxaxis.Value.ToString() + ":" + textyaxis.Value.ToString() + "\"";

                csettings.CustomOutputArgs = arguement;


                if (FormatChooser.SelectedIndex == 0)
                {
                    ffMpeg.ConvertMedia(ffMpegInputs, file + "ConvertedWithWatermark.avi", Format.avi, csettings);
                }
                else if (FormatChooser.SelectedIndex == 1)
                {
                    ffMpeg.ConvertMedia(ffMpegInputs, file + "ConvertedWithWatermark.mp4", Format.mp4, csettings);
                }
                else if (FormatChooser.SelectedIndex == 2)
                {
                    ffMpeg.ConvertMedia(ffMpegInputs, file + "ConvertedWithWatermark.mv4", Format.m4v, csettings);
                }
                else if (FormatChooser.SelectedIndex == 3)
                {
                    ffMpeg.ConvertMedia(ffMpegInputs, file + "ConvertedWithWatermark.gif", Format.gif, csettings);
                }
                else if (FormatChooser.SelectedIndex == 4)
                {
                    ffMpeg.ConvertMedia(ffMpegInputs, file + "ConvertedWithWatermark.mov", Format.mov, csettings);
                }
                else if (FormatChooser.SelectedIndex == 5)
                {
                    ffMpeg.ConvertMedia(ffMpegInputs, file + "ConvertedWithWatermark.wmv", Format.wmv, csettings);
                }
                else if (FormatChooser.SelectedIndex == 6)
                {
                    ffMpeg.ConvertMedia(ffMpegInputs, file + "ConvertedWithWatermark.swf", Format.swf, csettings);
                }
                else if (FormatChooser.SelectedIndex == 7)
                {
                    ffMpeg.ConvertMedia(ffMpegInputs, file + "ConvertedWithWatermark.ogg", Format.ogg, csettings);
                }
                else if (FormatChooser.SelectedIndex == 8)
                {
                    ffMpeg.ConvertMedia(ffMpegInputs, file + "ConvertedWithWatermark.mpeg", Format.mpeg, csettings);
                }
                else //Nothing selected? Default to .avi format.
                {
                    ffMpeg.ConvertMedia(ffMpegInputs, file + "ConvertedWithWatermark.avi", Format.avi, csettings);
                }
            }
            catch (Exception e)
            {
                MessageBox.Show("Exception error has occured:\n" + e.Message.ToString(), Title);
            }
        }
示例#6
0
        void ConvertFileWithTextandWatermark(string file)
        {
            try
            {
                Font textBrush = new Font(textfont.SelectedItem.ToString(), (int)fontSize.Value);
                //first, create a dummy bitmap just to get a graphics object
                Image    img     = new Bitmap(1, 1);
                Graphics drawing = Graphics.FromImage(img);

                //measure the string to see how big the image needs to be
                SizeF textSize = drawing.MeasureString(OverlayText.Text.ToString(), textBrush);

                //free up the dummy image and old graphics object
                img.Dispose();
                drawing.Dispose();

                //create a new image of the right size
                img = new Bitmap((int)textSize.Width, (int)textSize.Height);

                drawing = Graphics.FromImage(img);

                //paint the background
                drawing.Clear(Color.Transparent);

                string     colorName    = textColour.SelectedItem.ToString();
                int        Transparency = TransparencySlider.Value;
                Color      newColor     = Color.FromArgb(Transparency, Color.FromName(colorName));
                SolidBrush brush        = new SolidBrush(newColor);

                drawing.DrawString(OverlayText.Text.ToString(), textBrush, brush, 0, 0);
                drawing.Save();

                img.Save(@"text.png", System.Drawing.Imaging.ImageFormat.Png);

                img.Dispose();
                textBrush.Dispose();
                drawing.Dispose();
                brush.Dispose();
            }
            catch (Exception e)
            {
                MessageBox.Show("Exception error has occured:\n" + e.Message.ToString(), Title);
            }
            try
            {
                using (var srcImage = Image.FromFile(WatermarkFileChooser.FileName))
                {
                    var newWidth  = (int)(WatermarkXsize.Value);
                    var newHeight = (int)(WatermarkYsize.Value);
                    using (var newImage = new Bitmap(newWidth, newHeight))
                        using (var graphics = Graphics.FromImage(newImage))
                        {
                            graphics.SmoothingMode     = SmoothingMode.AntiAlias;
                            graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
                            graphics.PixelOffsetMode   = PixelOffsetMode.HighQuality;
                            graphics.DrawImage(srcImage, new Rectangle(0, 0, newWidth, newHeight));
                            newImage.Save(@"Resized.png", System.Drawing.Imaging.ImageFormat.Png);
                            newImage.Dispose();
                        }
                    srcImage.Dispose();
                }
            }
            catch (Exception e)
            {
                MessageBox.Show("Exception error has occured:\n" + e.Message.ToString(), Title);
            }
            try
            {
                var ffMpeg = new NReco.VideoConverter.FFMpegConverter();

                NReco.VideoConverter.FFMpegInput[] ffMpegInputs = new NReco.VideoConverter.FFMpegInput[] { new FFMpegInput(file), new FFMpegInput(@"Resized.png"), new FFMpegInput(@"text.png") };

                ConvertSettings csettings = new ConvertSettings();

                if (ResizeOptions.Enabled == true)
                {
                    csettings.SetVideoFrameSize((int)Xaxis.Value, (int)Yaxis.Value);
                }

                csettings.AudioCodec = "copy";
                //ffmpeg - i input - i logo1 - i logo2 - filter_complex 'overlay=x=10:y=H-h-10,overlay=x=W-w-10:y=H-h-10' output
                string arguement = "-filter_complex \"overlay=" + logoxaxis.Value.ToString() + ":" + logoyaxis.Value.ToString() + ",overlay=" + textxaxis.Value.ToString() + ":" + textyaxis.Value.ToString() + "\"";

                csettings.CustomOutputArgs = arguement;


                if (FormatChooser.SelectedIndex == 0)
                {
                    ffMpeg.ConvertMedia(ffMpegInputs, file + "ConvertedWithWatermark.avi", Format.avi, csettings);
                }
                else if (FormatChooser.SelectedIndex == 1)
                {
                    ffMpeg.ConvertMedia(ffMpegInputs, file + "ConvertedWithWatermark.mp4", Format.mp4, csettings);
                }
                else if (FormatChooser.SelectedIndex == 2)
                {
                    ffMpeg.ConvertMedia(ffMpegInputs, file + "ConvertedWithWatermark.mv4", Format.m4v, csettings);
                }
                else if (FormatChooser.SelectedIndex == 3)
                {
                    ffMpeg.ConvertMedia(ffMpegInputs, file + "ConvertedWithWatermark.gif", Format.gif, csettings);
                }
                else if (FormatChooser.SelectedIndex == 4)
                {
                    ffMpeg.ConvertMedia(ffMpegInputs, file + "ConvertedWithWatermark.mov", Format.mov, csettings);
                }
                else if (FormatChooser.SelectedIndex == 5)
                {
                    ffMpeg.ConvertMedia(ffMpegInputs, file + "ConvertedWithWatermark.wmv", Format.wmv, csettings);
                }
                else if (FormatChooser.SelectedIndex == 6)
                {
                    ffMpeg.ConvertMedia(ffMpegInputs, file + "ConvertedWithWatermark.swf", Format.swf, csettings);
                }
                else if (FormatChooser.SelectedIndex == 7)
                {
                    ffMpeg.ConvertMedia(ffMpegInputs, file + "ConvertedWithWatermark.ogg", Format.ogg, csettings);
                }
                else if (FormatChooser.SelectedIndex == 8)
                {
                    ffMpeg.ConvertMedia(ffMpegInputs, file + "ConvertedWithWatermark.mpeg", Format.mpeg, csettings);
                }
                else //Nothing selected? Default to .avi format.
                {
                    ffMpeg.ConvertMedia(ffMpegInputs, file + "ConvertedWithWatermark.avi", Format.avi, csettings);
                }
            }
            catch (Exception e)
            {
                MessageBox.Show("Exception error has occured:\n" + e.Message.ToString(), Title);
            }
        }