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); }
public static FFmpegVideoCommandBuilder Initilize(int index, int bitrate, string path, ICollection <string> additionalFlags) { FFmpegVideoCommandBuilder builder = new FFmpegVideoCommandBuilder(index, bitrate, path, additionalFlags); return(builder); }