FFMpegAudioWriterItem(string Name, string Extension, FFMpegAudioArgsProvider AudioArgsProvider) { _name = Name; _audioArgsProvider = AudioArgsProvider; this.Extension = Extension; }
/// <summary> /// Creates a new instance of <see cref="FFMpegWriter"/>. /// </summary> /// <param name="FileName">Path for the output file.</param> /// <param name="FrameRate">Video Frame Rate.</param> public FFMpegWriter(string FileName, IImageProvider ImageProvider, int FrameRate, int VideoQuality, FFMpegVideoArgsProvider VideoArgsProvider, int AudioQuality, FFMpegAudioArgsProvider AudioArgsProvider, IAudioProvider AudioProvider, int Frequency = 44100, int Channels = 2) { _videoBuffer = new byte[ImageProvider.Width * ImageProvider.Height * 4]; var audioPipeName = GetPipeName(); var videoPipeName = GetPipeName(); var videoInArgs = $"-framerate {FrameRate} -f rawvideo -pix_fmt rgb32 -video_size {ImageProvider.Width}x{ImageProvider.Height} -i {pipePrefix}{videoPipeName}"; var videoOutArgs = $"{VideoArgsProvider(VideoQuality)} -r {FrameRate}"; string audioInArgs = "", audioOutArgs = ""; if (AudioProvider != null) { audioInArgs = $"-f s16le -acodec pcm_s16le -ar {Frequency} -ac {Channels} -i {pipePrefix}{audioPipeName}"; audioOutArgs = AudioArgsProvider(AudioQuality); _audioPipe = new NamedPipeServerStream(audioPipeName, PipeDirection.Out, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous, 10000, 10000); } _ffmpegIn = new NamedPipeServerStream(videoPipeName, PipeDirection.Out, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous, 10000, 10000); _ffmpegProcess = FFMpegService.StartFFMpeg($"{videoInArgs} {audioInArgs} {videoOutArgs} {audioOutArgs} \"{FileName}\""); }
FFMpegItem(string Name, string Extension, FFMpegVideoArgsProvider VideoArgsProvider, FFMpegAudioArgsProvider AudioArgsProvider) { this.Extension = Extension; _videoArgsProvider = VideoArgsProvider; _audioArgsProvider = AudioArgsProvider; _name = Name; }
public FFMpegPostProcessingItem(string Name, string Extension, FFMpegVideoArgsProvider VideoArgsProvider, FFMpegAudioArgsProvider AudioArgsProvider) { _name = Name; _videoArgsProvider = VideoArgsProvider; _audioArgsProvider = AudioArgsProvider; this.Extension = Extension; }
FFMpegItem(string Name, Func <string> Extension, FFMpegVideoArgsProvider VideoArgsProvider, FFMpegAudioArgsProvider AudioArgsProvider) { _extension = Extension; _videoArgsProvider = VideoArgsProvider; _audioArgsProvider = AudioArgsProvider; _name = Name; }
public FFMpegAudioWriter(string FileName, int AudioQuality, FFMpegAudioArgsProvider AudioArgsProvider, int Frequency = 44100, int Channels = 2) { _ffmpegProcess = new Process { StartInfo = { FileName = "ffmpeg.exe", Arguments = $"-f s16le -acodec pcm_s16le -ar {Frequency} -ac {Channels} -i - -vn {AudioArgsProvider(AudioQuality)} \"{FileName}\"", UseShellExecute = false, CreateNoWindow = true, RedirectStandardInput = true } }; _ffmpegProcess.Start(); _ffmpegIn = _ffmpegProcess.StandardInput.BaseStream; }
public FFMpegAudioWriter(string FileName, int AudioQuality, FFMpegAudioArgsProvider AudioArgsProvider, int Frequency = 44100, int Channels = 2) { _ffmpegProcess = new Process { StartInfo = { FileName = ServiceProvider.FFMpegExePath, Arguments = $"-hide_banner -f s16le -acodec pcm_s16le -ar {Frequency} -ac {Channels} -i - -vn {AudioArgsProvider(AudioQuality)} \"{FileName}\"", UseShellExecute = false, CreateNoWindow = true, RedirectStandardInput = true } }; _ffmpegProcess.Exited += (s, e) => _error = _ffmpegProcess.ExitCode != 0; _ffmpegProcess.Start(); _ffmpegIn = _ffmpegProcess.StandardInput.BaseStream; }
FFMpegItem(string Name, Func <string> Extension, FFMpegVideoArgsProvider VideoArgsProvider, FFMpegAudioArgsProvider AudioArgsProvider) : this(Name, Extension) { _videoArgsProvider = VideoArgsProvider; _audioArgsProvider = AudioArgsProvider; }
// The (FFMpeg) appended to the name is expected in Custom Codecs FFMpegAudioItem(string Name, string Extension, FFMpegAudioArgsProvider AudioArgsProvider) : base($"{Name} (FFMpeg)", Extension) { this.AudioArgsProvider = AudioArgsProvider; }
public static FFMpegVideoWriterArgs FromVideoWriterArgs(VideoWriterArgs Args, FFMpegVideoArgsProvider VideoArgsProvider, FFMpegAudioArgsProvider AudioArgsProvider) { return(new FFMpegVideoWriterArgs { FileName = Args.FileName, ImageProvider = Args.ImageProvider, FrameRate = Args.FrameRate, VideoQuality = Args.VideoQuality, VideoArgsProvider = VideoArgsProvider, AudioQuality = Args.AudioQuality, AudioArgsProvider = AudioArgsProvider, AudioProvider = Args.AudioProvider }); }
/// <summary> /// Creates a new instance of <see cref="FFMpegMuxedWriter"/>. /// </summary> /// <param name="FilePath">Path for the output file.</param> /// <param name="FrameRate">Video Frame Rate.</param> public FFMpegMuxedWriter(string FilePath, int FrameRate, int VideoQuality, FFMpegVideoArgsProvider VideoArgsProvider, int AudioQuality, FFMpegAudioArgsProvider AudioArgsProvider, IAudioProvider AudioProvider) { if (AudioProvider == null) { throw new ArgumentNullException(nameof(AudioProvider), $"{nameof(AudioProvider)} can't be null. Use {nameof(FFMpegVideoWriter)} instead."); } if (!Directory.Exists(BaseDir)) { Directory.CreateDirectory(BaseDir); } var fileName = Path.GetFileName(FilePath); tempVideoPath = Path.Combine(BaseDir, fileName); tempAudioPath = Path.Combine(BaseDir, Path.ChangeExtension(fileName, ".wav")); _audioWriter = new AudioFileWriter(tempAudioPath, AudioProvider.WaveFormat); _videoWriter = new FFMpegVideoWriter(tempVideoPath, FrameRate, VideoQuality, VideoArgsProvider); _ffmpegArgs = $"-i {tempVideoPath} -vcodec copy -i {tempAudioPath} {AudioArgsProvider(AudioQuality)} \"{FilePath}\""; }
public FFMpegAudioWriter(string FileName, int AudioQuality, FFMpegAudioArgsProvider AudioArgsProvider, int Frequency = 44100, int Channels = 2) { _ffmpegProcess = FFMpegService.StartFFMpeg($"-f s16le -acodec pcm_s16le -ar {Frequency} -ac {Channels} -i - -vn {AudioArgsProvider(AudioQuality)} \"{FileName}\"", FileName); _ffmpegIn = _ffmpegProcess.StandardInput.BaseStream; }