public async Task <IActionResult> Download(string id) { var client = new YoutubeClient(); var converter = new YoutubeConverter(client); var streamManifest = await client.Videos.Streams.GetManifestAsync(id); var title = client.Videos.GetAsync(id).Result.Title; string path = $"{id}.mp3"; var streamInfo = streamManifest.GetAudioOnly().WithHighestBitrate(); var mediaStreamInfos = new IStreamInfo[] { streamInfo }; await converter.DownloadAndProcessMediaStreamsAsync(mediaStreamInfos, path, "mp3"); byte[] buff = System.IO.File.ReadAllBytes(path); System.IO.File.Delete(path); return(File(buff, "application/force-download", $"{title}.mp3")); }
private static void DownloadVideo(IYoutubeClient client, Video video, string downloadFolder, string videoFileNameBase, IProgress <double> progress) { var converter = new YoutubeConverter(client, Ffmpeg.DefaultFilePath); var mediaStreamInfoSet = client.GetVideoMediaStreamInfosAsync(video.Id).Result; var videoStreamInfo = mediaStreamInfoSet.Video.OrderByDescending(info => info.VideoQuality).ThenByDescending(info => info.Framerate).First(); var audioStreamInfo = mediaStreamInfoSet.Audio.OrderByDescending(info => info.Bitrate).First(); var extension = videoStreamInfo.Container.GetFileExtension(); converter.DownloadAndProcessMediaStreamsAsync( new MediaStreamInfo[] { videoStreamInfo, audioStreamInfo }, Path.Combine(downloadFolder, videoFileNameBase + $".{extension}"), extension, progress) .Wait(); }
public async Task <string> DownloadVideoOptionsTask(string url) { //try //{ var client = new YoutubeClient(); var id = YoutubeClient.ParseVideoId(url); var video = await client.GetVideoAsync(id); var author = video.Author; var converter = new YoutubeConverter(client, "C:\\ffmpeg-4.2.2\\bin\\ffmpeg.exe"); var mediaStreamInfoSet = await client.GetVideoMediaStreamInfosAsync(id); // Select video stream var videoStreamInfo = mediaStreamInfoSet.Video.FirstOrDefault(s => s.VideoQualityLabel == "240p"); // Select audio stream var audioStreamInfo = mediaStreamInfoSet.Audio.First(s => s.Bitrate == 128); // Combine them into a collection var mediaStreamInfos = new MediaStreamInfo[] { audioStreamInfo, videoStreamInfo }; // Download and process them into one file await converter.DownloadAndProcessMediaStreamsAsync(mediaStreamInfos, $"C:\\Temp\\{author}.wav", "wav"); var path = $"C:\\Temp\\{author}.wav"; Console.WriteLine("[DownloadVideoTask] - Done Download Video"); return(path); //} //catch (Exception e) //{ // Console.WriteLine($"[DownloadVideoTask] - Error {e}"); // return null; //} }
static async Task Main(string[] args) { var client = new YoutubeClient(); var converter = new YoutubeConverter(client); // re-using the same client instance for efficiency, not required // Get media stream info set var mediaStreamInfoSet = await client.GetVideoMediaStreamInfosAsync("NIJHqNWMtAw"); // Select audio stream var audioStreamInfo = mediaStreamInfoSet.Audio.WithHighestBitrate(); // Select video stream var videoStreamInfo = mediaStreamInfoSet.Video.FirstOrDefault(s => s.VideoQualityLabel.Contains("360")); // Combine them into a collection var mediaStreamInfos = new MediaStreamInfo[] { audioStreamInfo, videoStreamInfo }; // Download and process them into one file await converter.DownloadAndProcessMediaStreamsAsync(mediaStreamInfos, @"video.mp4", "mp4", new MyProgress()); Console.WriteLine("Done"); }
static async void DownloadVideo(MediaStreamInfoSet mediaStreamInfoSet, string title, MaterialListView downloadQueueMaterialListView, string format, string quality, int _listViewItems, string savePath, MaterialCheckBox deleteDoneCheckBox) { var _audioStreamInfo = mediaStreamInfoSet.Audio.OrderByDescending(a => a.Bitrate).First(); var _videoStreamInfo = mediaStreamInfoSet.Video.Where(v => v.Container.ToString() == format && v.VideoQualityLabel == quality).First(); var _mediaStreamInfos = new MediaStreamInfo[] { _audioStreamInfo, _videoStreamInfo }; IProgress <double> progress = new Progress <double>(p => { ExtensionMethods.SynchronizedInvoke(downloadQueueMaterialListView, () => downloadQueueMaterialListView.Items[_listViewItems].SubItems[4].Text = (p * 100).ToString("0.00") + "%"); if (p * 100 == 100) { ExtensionMethods.SynchronizedInvoke(downloadQueueMaterialListView, () => downloadQueueMaterialListView.Items[_listViewItems].SubItems[4].Text = "Done!"); DatabaseOperations.AddNewRecord(Settings.Default.Guid, title, format, savePath); if (deleteDoneCheckBox.Checked == true) { Thread.Sleep(2000); ExtensionMethods.SynchronizedInvoke(downloadQueueMaterialListView, () => downloadQueueMaterialListView.Items[_listViewItems].Remove()); } } }); await Task.Run(() => _converter.DownloadAndProcessMediaStreamsAsync(_mediaStreamInfos, savePath + "." + format, format, progress)); }