public void Video_Duration() { var video = FFProbe.Analyse(VideoLibrary.LocalVideo.FullName); var output = Input.OutputLocation(VideoType.Mp4); try { FFMpegArguments .FromFileInput(VideoLibrary.LocalVideo) .OutputToFile(output, false, opt => opt.WithDuration(TimeSpan.FromSeconds(video.Duration.TotalSeconds - 2))) .ProcessSynchronously(); Assert.IsTrue(File.Exists(output)); var outputVideo = FFProbe.Analyse(output); Assert.AreEqual(video.Duration.Days, outputVideo.Duration.Days); Assert.AreEqual(video.Duration.Hours, outputVideo.Duration.Hours); Assert.AreEqual(video.Duration.Minutes, outputVideo.Duration.Minutes); Assert.AreEqual(video.Duration.Seconds - 2, outputVideo.Duration.Seconds); } finally { if (File.Exists(output)) { File.Delete(output); } } }
public void Builder_BuildString_Quiet() { var str = FFMpegArguments.FromFileInput("input.mp4").WithGlobalOptions(opt => opt.WithVerbosityLevel()) .OutputToFile("output.mp4", false).Arguments; Assert.AreEqual("-hide_banner -loglevel error -i \"input.mp4\" \"output.mp4\"", str); }
public void Builder_BuildString_BitStream() { var str = FFMpegArguments.FromFileInput("input.mp4").OutputToFile("output.mp4", false, opt => opt.WithBitStreamFilter(Channel.Audio, Filter.H264_Mp4ToAnnexB)).Arguments; Assert.AreEqual("-i \"input.mp4\" -bsf:a h264_mp4toannexb \"output.mp4\"", str); }
public void Builder_BuildString_Codec_Override() { var str = FFMpegArguments.FromFileInput("input.mp4").OutputToFile("output.mp4", true, opt => opt.WithVideoCodec(VideoCodec.LibX264).ForcePixelFormat("yuv420p")).Arguments; Assert.AreEqual("-i \"input.mp4\" -c:v libx264 -pix_fmt yuv420p \"output.mp4\" -y", str); }
public void Builder_BuildString_ForcePixelFormat() { var str = FFMpegArguments.FromFileInput("input.mp4") .OutputToFile("output.mp4", false, opt => opt.ForcePixelFormat("yuv444p")).Arguments; Assert.AreEqual("-i \"input.mp4\" -pix_fmt yuv444p \"output.mp4\"", str); }
public void Builder_BuildString_AudioCodec() { var str = FFMpegArguments.FromFileInput("input.mp4") .OutputToFile("output.mp4", true, opt => opt.WithAudioCodec(AudioCodec.Aac)).Arguments; Assert.AreEqual("-i \"input.mp4\" -c:a aac \"output.mp4\" -y", str); }
public void Builder_BuildString_Threads_2() { var str = FFMpegArguments.FromFileInput("input.mp4") .OutputToFile("output.mp4", false, opt => opt.UsingMultithreading(true)).Arguments; Assert.AreEqual($"-i \"input.mp4\" -threads {Environment.ProcessorCount} \"output.mp4\"", str); }
public void Builder_BuildString_VariableBitrate() { var str = FFMpegArguments.FromFileInput("input.mp4") .OutputToFile("output.mp4", false, opt => opt.WithVariableBitrate(5)).Arguments; Assert.AreEqual("-i \"input.mp4\" -vbr 5 \"output.mp4\"", str); }
public void Builder_BuildString_Faststart() { var str = FFMpegArguments.FromFileInput("input.mp4") .OutputToFile("output.mp4", false, opt => opt.WithFastStart()).Arguments; Assert.AreEqual("-i \"input.mp4\" -movflags faststart \"output.mp4\"", str); }
public void Builder_BuildString_DisableChannel_Video() { var str = FFMpegArguments.FromFileInput("input.mp4") .OutputToFile("output.mp4", false, opt => opt.DisableChannel(Channel.Video)).Arguments; Assert.AreEqual("-i \"input.mp4\" -vn \"output.mp4\"", str); }
public void Builder_BuildString_AudioSamplingRate() { var str = FFMpegArguments.FromFileInput("input.mp4") .OutputToFile("output.mp4", false, opt => opt.WithAudioSamplingRate(44000)).Arguments; Assert.AreEqual("-i \"input.mp4\" -ar 44000 \"output.mp4\"", str); }
public void Builder_BuildString_Copy_Both() { var str = FFMpegArguments.FromFileInput("input.mp4") .OutputToFile("output.mp4", false, opt => opt.CopyChannel()).Arguments; Assert.AreEqual("-i \"input.mp4\" -c copy \"output.mp4\"", str); }
public async Task Video_Cancel_Async_With_Timeout() { var outputFile = new TemporaryFile("out.mp4"); var task = FFMpegArguments .FromFileInput("testsrc2=size=320x240[out0]; sine[out1]", false, args => args .WithCustomArgument("-re") .ForceFormat("lavfi")) .OutputToFile(outputFile, false, opt => opt .WithAudioCodec(AudioCodec.Aac) .WithVideoCodec(VideoCodec.LibX264) .WithSpeedPreset(Speed.VeryFast)) .CancellableThrough(out var cancel, 10000) .ProcessAsynchronously(false); await Task.Delay(300); cancel(); var result = await task; var outputInfo = await FFProbe.AnalyseAsync(outputFile); Assert.IsTrue(result); Assert.IsNotNull(outputInfo); Assert.AreEqual(320, outputInfo.PrimaryVideoStream !.Width); Assert.AreEqual(240, outputInfo.PrimaryVideoStream.Height); Assert.AreEqual("h264", outputInfo.PrimaryVideoStream.CodecName); Assert.AreEqual("aac", outputInfo.PrimaryAudioStream !.CodecName); }
public async Task Video_Cancel_Async() { var output = Input.OutputLocation(VideoType.Mp4); var task = FFMpegArguments .FromFileInput(VideoLibrary.LocalVideo) .OutputToFile(output, false, opt => opt .Resize(new Size(1000, 1000)) .WithAudioCodec(AudioCodec.Aac) .WithVideoCodec(VideoCodec.LibX264) .WithConstantRateFactor(14) .WithSpeedPreset(Speed.VerySlow) .Loop(3)) .CancellableThrough(out var cancel) .ProcessAsynchronously(false); try { await Task.Delay(300); cancel(); var result = await task; Assert.IsFalse(result); } finally { if (File.Exists(output)) { File.Delete(output); } } }
public void Builder_BuildString_Speed() { var str = FFMpegArguments.FromFileInput("input.mp4") .OutputToFile("output.mp4", false, opt => opt.WithSpeedPreset(Speed.Fast)).Arguments; Assert.AreEqual("-i \"input.mp4\" -preset fast \"output.mp4\"", str); }
public void Builder_BuildString_Overwrite() { var str = FFMpegArguments.FromFileInput("input.mp4") .OutputToFile("output.mp4", false, opt => opt.OverwriteExisting()).Arguments; Assert.AreEqual("-i \"input.mp4\" -y \"output.mp4\"", str); }
public void Builder_BuildString_StartNumber() { var str = FFMpegArguments.FromFileInput("input.mp4") .OutputToFile("output.mp4", false, opt => opt.WithStartNumber(50)).Arguments; Assert.AreEqual("-i \"input.mp4\" -start_number 50 \"output.mp4\"", str); }
public void Builder_BuildString_RemoveMetadata() { var str = FFMpegArguments.FromFileInput("input.mp4") .OutputToFile("output.mp4", false, opt => opt.WithoutMetadata()).Arguments; Assert.AreEqual("-i \"input.mp4\" -map_metadata -1 \"output.mp4\"", str); }
public void Builder_BuildString_Threads_1() { var str = FFMpegArguments.FromFileInput("input.mp4") .OutputToFile("output.mp4", false, opt => opt.UsingThreads(50)).Arguments; Assert.AreEqual("-i \"input.mp4\" -threads 50 \"output.mp4\"", str); }
public void Builder_BuildString_ForceFormat() { var str = FFMpegArguments.FromFileInput("input.mp4", false, opt => opt.ForceFormat(VideoType.Mp4)) .OutputToFile("output.mp4", false, opt => opt.ForceFormat(VideoType.Mp4)).Arguments; Assert.AreEqual("-f mp4 -i \"input.mp4\" -f mp4 \"output.mp4\"", str); }
public void Builder_BuildString_Codec() { var str = FFMpegArguments.FromFileInput("input.mp4") .OutputToFile("output.mp4", false, opt => opt.WithVideoCodec(VideoCodec.LibX264)).Arguments; Assert.AreEqual("-i \"input.mp4\" -c:v libx264 \"output.mp4\"", str); }
public void Builder_BuildString_FrameRate() { var str = FFMpegArguments.FromFileInput("input.mp4") .OutputToFile("output.mp4", false, opt => opt.WithFramerate(50)).Arguments; Assert.AreEqual("-i \"input.mp4\" -r 50 \"output.mp4\"", str); }
public void Builder_BuildString_Duration() { var str = FFMpegArguments.FromFileInput("input.mp4") .OutputToFile("output.mp4", false, opt => opt.WithDuration(TimeSpan.FromSeconds(20))).Arguments; Assert.AreEqual("-i \"input.mp4\" -t 00:00:20 \"output.mp4\"", str); }
public void Builder_BuildString_Loop() { var str = FFMpegArguments.FromFileInput("input.mp4").OutputToFile("output.mp4", false, opt => opt.Loop(50)) .Arguments; Assert.AreEqual("-i \"input.mp4\" -loop 50 \"output.mp4\"", str); }
public void Builder_BuildString_AudioBitrate() { var str = FFMpegArguments.FromFileInput("input.mp4") .OutputToFile("output.mp4", true, opt => opt.WithAudioBitrate(AudioQuality.Normal)).Arguments; Assert.AreEqual("-i \"input.mp4\" -b:a 128k \"output.mp4\" -y", str); }
public void Builder_BuildString_Shortest() { var str = FFMpegArguments.FromFileInput("input.mp4") .OutputToFile("output.mp4", false, opt => opt.UsingShortest()).Arguments; Assert.AreEqual("-i \"input.mp4\" -shortest \"output.mp4\"", str); }
public void Builder_BuildString_AudioCodec_Fluent() { var str = FFMpegArguments.FromFileInput("input.mp4").OutputToFile("output.mp4", false, opt => opt.WithAudioCodec(AudioCodec.Aac).WithAudioBitrate(128)).Arguments; Assert.AreEqual("-i \"input.mp4\" -c:a aac -b:a 128k \"output.mp4\"", str); }
public void Builder_BuildString_Size() { var str = FFMpegArguments.FromFileInput("input.mp4") .OutputToFile("output.mp4", false, opt => opt.Resize(1920, 1080)).Arguments; Assert.AreEqual("-i \"input.mp4\" -s 1920x1080 \"output.mp4\"", str); }
public void Builder_BuildString_HardwareAcceleration_Specific() { var str = FFMpegArguments.FromFileInput("input.mp4").OutputToFile("output.mp4", false, opt => opt.WithHardwareAcceleration(HardwareAccelerationDevice.CUVID)).Arguments; Assert.AreEqual("-i \"input.mp4\" -hwaccel cuvid \"output.mp4\"", str); }
public bool PrepareAudio() { var Folder = Config.InputFolder; var filename = Config.InputFilename; try { Console.ForegroundColor = ConsoleColor.Gray; Console.Write("Writing Audio..."); FFMpegArguments .FromFileInput($"{Folder}/{filename}", true) .OutputToFile($"{Folder}/{filename}.wav", true, o => o .WithCustomArgument("-ac 1 -ar 8192")) .ProcessSynchronously(); Console.CursorLeft = 0; Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("Audio Written! "); return(true); } catch (Exception e) { Console.CursorLeft = 16; Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Could not write audio!"); return(false); } }