public void DrawImageOnOneVideo() { const string OutputFile = OutputFolder + "Image20SecCut_Medium.mp4"; var ffmpeg = new FFMpeg(this.temporaryFilesStorage); var images = new List <DrawImageTimeRecord>(); images.Add(new DrawImageTimeRecord(File.ReadAllBytes(SampleFiles.SamplePngImage), 100, 100, 1, 4)); ffmpeg.DrawImage(SampleFiles.SampleVideo_5sec, images, OutputFile, GlobalExportProgress.Empty); Assert.IsTrue(File.Exists(OutputFile)); }
private void CutAndDrawTextAndDrawImageAndApplyTimeWarp( FFMpeg ffMpeg, FFMpegCutOptions cutOptions, TemporaryFilesStorage temporaryFilesStorage) { EnsureFileDoesNotExist(cutOptions.OutputFile); var extensionForResultFile = Path.GetExtension(cutOptions.OutputFile); var imagesExist = cutOptions.ImagesTimeTable != null && cutOptions.ImagesTimeTable.Any(); var timeWarpExists = cutOptions.TimeWarps != null && cutOptions.TimeWarps.Any(); if (!cutOptions.OverlayText.Any() && !imagesExist && !timeWarpExists) { ffMpeg.Cut(cutOptions); return; } var intermediateFile1 = temporaryFilesStorage.GetIntermediateFile(extensionForResultFile); ffMpeg.Cut(cutOptions.CloneWithOtherOutput(intermediateFile1)); if (cutOptions.OverlayText.Any()) { var intermediateFile2 = (imagesExist || timeWarpExists) ? temporaryFilesStorage.GetIntermediateFile(extensionForResultFile) : cutOptions.OutputFile; ffMpeg.DrawText(intermediateFile1, cutOptions.OverlayText, intermediateFile2, cutOptions.GlobalExportProgress); File.Delete(intermediateFile1); intermediateFile1 = intermediateFile2; } if (imagesExist) { var intermediateFile3 = timeWarpExists ? temporaryFilesStorage.GetIntermediateFile(extensionForResultFile) : cutOptions.OutputFile; ffMpeg.DrawImage(intermediateFile1, cutOptions.ImagesTimeTable, intermediateFile3, cutOptions.GlobalExportProgress); File.Delete(intermediateFile1); intermediateFile1 = intermediateFile3; } if (timeWarpExists) { ffMpeg.ApplyTimeWarp(intermediateFile1, cutOptions.TimeWarps, cutOptions.OutputFile, this.globalExportProgress); File.Delete(intermediateFile1); } }