예제 #1
0
        public FFmpegCommandBuilder WithVideoCommands(IEnumerable <MediaStream> videoStreams, IEnumerable <IQuality> qualities, int framerate, int keyframeInterval, int defaultBitrate)
        {
            // TODO: TEMP(ish) for now, ideally the caller could call all the appropriate builder methods
            foreach (MediaStream video in videoStreams)
            {
                if (!video.IsStreamValid())
                {
                    continue;
                }

                foreach (IQuality quality in qualities)
                {
                    bool   copyThisStream = enableStreamCopying && quality.Bitrate == 0;
                    string path           = Path.Combine(outputDirectory, $"{outputBaseFilename}_{(quality.Bitrate == 0 ? "original" : quality.Bitrate.ToString())}.mp4");

                    FFmpegVideoCommandBuilder videoBuilder = FFmpegVideoCommandBuilder.Initilize(video.index, quality.Bitrate, path, AdditionalVideoFlags);

                    if (!copyThisStream)
                    {
                        videoBuilder
                        .WithSize(quality)
                        .WithBitrate(quality.Bitrate, defaultBitrate)
                        .WithPreset(quality.Preset)
                        .WithProfile(quality.Profile)
                        .WithProfileLevel(quality.Level)
                        .WithPixelFormat(quality.PixelFormat);
                    }

                    StreamVideoFile videoStream = videoBuilder
                                                  .WithFramerate(framerate)
                                                  .WithVideoCodec(video.codec_name, keyframeInterval, copyThisStream)
                                                  .Build();

                    videoFiles.Add(videoStream);
                }
            }

            return(this);
        }
예제 #2
0
        public static FFmpegVideoCommandBuilder Initilize(int index, int bitrate, string path, ICollection <string> additionalFlags)
        {
            FFmpegVideoCommandBuilder builder = new FFmpegVideoCommandBuilder(index, bitrate, path, additionalFlags);

            return(builder);
        }