/// <summary> /// Build ffmpeg args for Windows /// </summary> /// <returns>FFmpeg arguments for recording</returns> public Dictionary <string, string> ForWindows(Dictionary <string, string> d, RecordingSettings rs, DeviceManager dm) { #region Add audio devices string audioDevices = String.Empty; foreach (var ad in rs.AudioDevicesToRecord) { audioDevices += $" -f dshow -i audio=\"{ad.Name}\""; } d.Add($"audioDevices", audioDevices); #endregion #region Add video device // Add directshow d.Add("dshow", $"-f dshow"); string videoDevice; if (rs.VideoDevice.ToLower().EqualsAnyOf("default", "desktop screen", dm.DesktopVideoDevice)) { videoDevice = $"-i video=\"{dm.DesktopVideoDevice}\""; } else { videoDevice = $"-i video=\"{rs.VideoDevice}\""; } d.Add("videoDevice", videoDevice); #endregion #region Audio mapping d.Add("maps", GetAudioMaps((rs.SeperateAudioTracks == "true") ? true : false, rs.AudioDevicesToRecord)); #endregion #region FPS // Add FPS if it's an integer, otherwise default to 30 d.Add("fps", $"-framerate {GetFPS(rs.FPS)}"); #endregion #region Resolution d.Add("res", $"-video_size {GetResolution(rs.Resolution)}"); #endregion #region Other // Zero Latency if (rs.ZeroLatency == "true") { d.Add("tune", "-tune zerolatency"); } // Ultra Fast if (rs.UltraFast == "true") { d.Add("preset", "-preset ultrafast"); } #endregion #region Video Output Location & Format d.Add("videoOutput", $"\"{GetVideoOutput(PathHelper.FolderPath(rs.VideoSaveFolder), DateTimeCodeConverter.Convert(rs.VideoSaveName), GetVideoFormat(rs.Format))}\""); #endregion return(d); }
/// <summary> /// Build ffmpeg args for Linux /// </summary> /// <returns>FFmpeg arguments for recording</returns> public Dictionary <string, string> ForLinux(Dictionary <string, string> d, RecordingSettings rs, DeviceManager dm) { #region Add Pulse Inputs // Add audio devices foreach (var ad in rs.AudioDevicesToRecord) { d.Add($"pulse{ad.SourceNumber}", $"-f pulse -i {ad.SourceNumber}"); } #endregion #region Video Settings // Put video settings before x11grab device to make sure they actually apply // Recording FPS d.Add("fps", $"-framerate {GetFPS(rs.FPS)}"); // Recording Resolution d.Add("res", $"-video_size {GetResolution(rs.Resolution)}"); // Add x11grab d.Add("x11grab", $"-f x11grab"); // Region on desktop to record d.Add("desktopRegion", "-i :0.0+0,0"); #endregion #region Audio mapping d.Add("maps", GetAudioMaps((rs.SeperateAudioTracks == "true") ? true : false, rs.AudioDevicesToRecord)); #endregion // Video output path d.Add("videoOutput", $"\"{GetVideoOutput(PathHelper.FolderPath(rs.VideoSaveFolder), DateTimeCodeConverter.Convert(rs.VideoSaveName), GetVideoFormat(rs.Format))}\""); return(d); }