Пример #1
0
        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"));
        }
Пример #2
0
        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();
        }
Пример #3
0
        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;
            //}
        }
Пример #4
0
        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");
        }
Пример #5
0
        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));
        }