public virtual OperationStatus GenerateVideo()
 {
     try
     {
         var converter = new NReco.VideoConverter.FFMpegConverter();
         converter.LogReceived += Converter_LogReceived;
         var commandString = config.toCommandString();
         converter.Invoke(commandString);
         return(new OperationStatus(true, "Successfully Converted"));
     }
     catch (Exception ex)
     {
         return(new OperationStatus(false, "Exception Occoured", "Exception: " + ex.Message));
     }
 }
        private bool Rotate(FileEntry fileEntry, int rotateDegrees, ref string error)
        {
            bool coverted = false;

            Metadata metadata = databaseAndCacheMetadataExiftool.ReadMetadataFromCacheOrDatabase(new FileEntryBroker(fileEntry, MetadataBrokerType.ExifTool));

            if (metadata == null)
            {
                error += (error == "" ? "" : "\r\n") + "Failed to rotated: " + fileEntry.FileFullPath + "\r\nMetadata was missing, need load metadata first.";
            }
            else if (ImageAndMovieFileExtentions.ImageAndMovieFileExtentionsUtility.IsImageFormat(fileEntry.FileFullPath))
            {
                try
                {
                    ImageAndMovieFileExtentions.ImageAndMovieFileExtentionsUtility.RoateImage(fileEntry.FileFullPath, rotateDegrees);
                    coverted = true;
                }
                catch (Exception ex)
                {
                    coverted = false;
                    error   += (error == "" ? "" : "\r\n") + "Failed to rotated: " + fileEntry.FileFullPath + "\r\nError message: " + ex.Message;
                }
            }
            else if (ImageAndMovieFileExtentions.ImageAndMovieFileExtentionsUtility.IsVideoFormat(fileEntry.FileFullPath))
            {
                string outputFolder   = Path.GetDirectoryName(fileEntry.FileFullPath);
                string tempOutputfile = Path.Combine(outputFolder, "temp_" + Guid.NewGuid().ToString() + Path.GetExtension(fileEntry.FileFullPath));

                try
                {
                    timerSaveProgessRemoveProgress.Start();

                    var ffMpeg = new NReco.VideoConverter.FFMpegConverter();
                    durationMpegVideoConvertion = new TimeSpan(-1);

                    ffMpeg.ConvertProgress += FfMpeg_ConvertProgress;
                    ffMpeg.LogReceived     += FfMpeg_LogReceived;
                    switch (rotateDegrees)
                    {
                    case 90:
                        ffMpeg.Invoke("-y -i \"" + fileEntry.FileFullPath + "\" -vf \"transpose=1\" \"" + tempOutputfile + "\"");
                        break;

                    case 180:
                        ffMpeg.Invoke("-y -i \"" + fileEntry.FileFullPath + "\" -vf \"transpose=2,transpose=2\" \"" + tempOutputfile + "\"");
                        break;

                    case 270:
                        ffMpeg.Invoke("-y -i \"" + fileEntry.FileFullPath + "\" -vf \"transpose=2\" \"" + tempOutputfile + "\"");
                        break;

                    default:
                        throw new NotImplementedException();
                    }

                    coverted = true;
                }
                catch (Exception ex)
                {
                    coverted = false;
                    error   += (error == "" ? "" : "\r\n") + "Failed to rotated: " + fileEntry.FileFullPath + "\r\nError message: " + ex.Message;
                }

                try
                {
                    if (coverted && new System.IO.FileInfo(tempOutputfile).Length > 0)
                    {
                        FileHandler.Delete(fileEntry.FileFullPath, Properties.Settings.Default.MoveToRecycleBin);
                        FileHandler.Move(tempOutputfile, fileEntry.FileFullPath);
                    }
                    else
                    {
                        File.Delete(tempOutputfile);
                    }
                }
                catch (Exception ex)
                {
                    error += (error == "" ? "" : "\r\n") + ex.Message;
                }
            }

            if (coverted) //Replicate metadata and save back to media file
            {
                Metadata metadataOriginal = new Metadata(MetadataBrokerType.Empty);

                if (metadata != null)
                {
                    Metadata metadataToSave = new Metadata(metadata);
                    metadataToSave.PersonalRegionRotate(rotateDegrees);
                    AddQueueSaveUsingExiftoolMetadataUpdatedByUserLock(metadataToSave, metadataOriginal);
                }
            }

            return(coverted);
        }