public IVideoFileWriter GetVideoFileWriter(VideoWriterArgs Args, string OutputArgs) { var args = FFmpegVideoWriterArgs.FromVideoWriterArgs(Args, _videoArgsProvider, _audioArgsProvider); args.OutputArgs = OutputArgs; return(new FFmpegWriter(args)); }
public FFmpegPostProcessingWriter(FFmpegVideoWriterArgs Args) { _args = Args; _tempFileName = Path.GetTempFileName(); _ffMpegWriter = FFmpegItem.x264.GetVideoFileWriter(new VideoWriterArgs { AudioProvider = Args.AudioProvider, AudioQuality = Args.AudioQuality, FileName = _tempFileName, FrameRate = Args.FrameRate, ImageProvider = Args.ImageProvider, VideoQuality = Args.VideoQuality }, "-f mp4 -y"); }
public virtual IVideoFileWriter GetVideoFileWriter(VideoWriterArgs Args) { return(new FFmpegWriter(FFmpegVideoWriterArgs.FromVideoWriterArgs(Args, _videoArgsProvider, _audioArgsProvider))); }
public IVideoFileWriter GetVideoFileWriter(VideoWriterArgs args) { return(new FFmpegPostProcessingWriter(FFmpegVideoWriterArgs.FromVideoWriterArgs(args, _videoArgsProvider, _audioArgsProvider))); }
/// <summary> /// Creates a new instance of <see cref="FFmpegWriter"/>. /// </summary> public FFmpegWriter(FFmpegVideoWriterArgs args) { var settings = ServiceProvider.Get <FFmpegSettings>(); _videoBuffer = new byte[args.ImageProvider.Width * args.ImageProvider.Height * 4]; Console.WriteLine($"Video Buffer Allocated: {_videoBuffer.Length}"); var videoPipeName = GetPipeName(); var argsBuilder = new FFmpegArgsBuilder(); argsBuilder.AddInputPipe(videoPipeName) .AddArg("-thread_queue_size 512") .AddArg($"-framerate {args.FrameRate}") .SetFormat("rawvideo") .AddArg("-pix_fmt rgb32") .SetVideoSize(args.ImageProvider.Width, args.ImageProvider.Height); var output = argsBuilder.AddOutputFile(args.FileName) .AddArg(args.VideoArgsProvider(args.VideoQuality)) .SetFrameRate(args.FrameRate); if (settings.Resize) { var width = settings.ResizeWidth; var height = settings.ResizeHeight; if (width % 2 == 1) { ++width; } if (height % 2 == 1) { ++height; } output.AddArg($"-vf scale={width}:{height}"); } if (args.AudioProvider != null) { var audioPipeName = GetPipeName(); argsBuilder.AddInputPipe(audioPipeName) .AddArg("-thread_queue_size 512") .SetFormat("s16le") .SetAudioCodec("pcm_s16le") .SetAudioFrequency(args.Frequency) .SetAudioChannels(args.Channels); output.AddArg(args.AudioArgsProvider(args.AudioQuality)); // UpdatePeriod * Frequency * (Bytes per Second) * Channels * 2 var audioBufferSize = (int)((1000.0 / args.FrameRate) * 44.1 * 2 * 2 * 2); _audioPipe = new NamedPipeServerStream(audioPipeName, PipeDirection.Out, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous, 0, audioBufferSize); } _ffmpegIn = new NamedPipeServerStream(videoPipeName, PipeDirection.Out, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous, 0, _videoBuffer.Length); output.AddArg(args.OutputArgs); _ffmpegProcess = FFmpegService.StartFFmpeg(argsBuilder.GetArgs(), args.FileName); }