Exemplo n.º 1
0
        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);
                }
            }
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
        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);
        }
Exemplo n.º 9
0
        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);
        }
Exemplo n.º 10
0
        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);
        }
Exemplo n.º 11
0
        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);
        }
Exemplo n.º 12
0
        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);
        }
Exemplo n.º 13
0
        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);
        }
Exemplo n.º 14
0
        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);
                }
            }
        }
Exemplo n.º 15
0
        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);
        }
Exemplo n.º 16
0
        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);
        }
Exemplo n.º 17
0
        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);
        }
Exemplo n.º 18
0
        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);
        }
Exemplo n.º 19
0
        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);
        }
Exemplo n.º 20
0
        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);
        }
Exemplo n.º 21
0
        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);
        }
Exemplo n.º 22
0
        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);
        }
Exemplo n.º 23
0
        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);
        }
Exemplo n.º 24
0
        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);
        }
Exemplo n.º 25
0
        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);
        }
Exemplo n.º 26
0
        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);
        }
Exemplo n.º 27
0
        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);
        }
Exemplo n.º 28
0
        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);
        }
Exemplo n.º 29
0
        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);
        }
Exemplo n.º 30
0
        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);
            }
        }