public async Task DownloadHightQualityAsync(VideoQuality quality, string saveFile) { System.Windows.MessageBox.Show("Укажите путь к файлу FFMPEG.EXE"); OpenFileDialog openFile = new OpenFileDialog(); openFile.Filter = "EXE file(*.exe)|*.exe"; openFile.ShowDialog(); textBoxStatus.Text = "Начинаю загрузку видео! Это может быть долго, ожидайте!"; var streamInfo = streamManifest.GetVideoOnly().Where(s => s.VideoQuality == quality).WithHighestVideoQuality(); var streamInfo1 = streamManifest.GetAudioOnly().WithHighestBitrate(); if (streamInfo != null) { await youtube.Videos.Streams.DownloadAsync(streamInfo, $"{saveFile}.mp4"); } if (streamInfo != null) { await youtube.Videos.Streams.DownloadAsync(streamInfo1, $"{saveFile}.mp3"); } string args = $"/c {openFile.FileName} -i \"{saveFile}.mp4\" -i \"{saveFile}.mp3\" -shortest {saveFile}_{quality.ToString()}.mp4"; ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.CreateNoWindow = false; startInfo.FileName = "cmd.exe"; startInfo.WorkingDirectory = saveFile + ".mp4"; startInfo.Arguments = args; using (Process exeProcess = Process.Start(startInfo)) { exeProcess.WaitForExit(); } File.Delete(saveFile + ".mp4"); File.Delete(saveFile + ".mp3"); textBoxStatus.Text = $"Видео успешно скачано, путь к файлу - > {saveFile}_{quality.ToString()}.mp4"; }
public static List <MediaStreamList> PopulateListGrouped(StreamManifest mediaStreamInfos) { var mixedStreams = new MediaStreamList(); var mixed = mediaStreamInfos.GetMuxed().ToList(); mixedStreams.Heading = "Mixed Downloads"; foreach (var item in mixed) { mixedStreams.Add(item); } var videoStreams = new MediaStreamList(); var videoS = mediaStreamInfos.GetVideoOnly().ToList(); videoStreams.Heading = "Video Only Downloads"; foreach (var item in videoS) { videoStreams.Add(item); } var audioStreams = new MediaStreamList(); var audio = mediaStreamInfos.GetAudioOnly().ToList(); audioStreams.Heading = "Audio Only Downloads"; foreach (var item in audio) { audioStreams.Add(item); } var list = new List <MediaStreamList> { mixedStreams, videoStreams, audioStreams }; return(list); }
private IVideoStreamInfo GetVideoStreamInfo(StreamManifest manifest) => manifest.GetVideoOnly().OrderByDescending(streamInfo => streamInfo.Bitrate).First();