Overview
YoutubeExtractor is a library for .NET, written in C#, that allows to download videos from YouTube and/or extract their audio track (audio extraction currently only for flash videos).
Target platforms
- .NET Framework 3.5 and higher
- Windows Phone 8
- WinRT
- Xamarin.Android
- Xamarin.iOS
Note that Windows Phone 8, WinRT, Xamarin.Android and Xamarin.iOS only support the extraction of the download URLs
NuGet
YoutubeExtractor at NuGet
License
YoutubeExtractor has two licenses;
The YouTube URL-extraction code is licensed under the MIT License
The audio extraction code that is originally from FlvExtract is licenced under the GNU General Public License version 2 (GPLv2)
Files that are GPLv2 licensed are explicitly marked with the GPLv2 header at the top of the file. All other files are implicitly MIT licensed.
Credits
- FlvExtract for extracting MP3 and AAC audio tracks out of flash files.
Example code
Get the download URLs
// Our test youtube linkstringlink="insert youtube link"; /* * Get the available video formats. * We'll work with them in the video and audio download examples.*/IEnumerable<VideoInfo> videoInfos=DownloadUrlResolver.GetDownloadUrls(link);
Download the video
/* * Select the first .mp4 video with 360p resolution*/VideoInfovideo=videoInfos .First(info=>info.VideoType==VideoType.Mp4&&info.Resolution==360); /* * If the video has a decrypted signature, decipher it*/if (video.RequiresDecryption) { DownloadUrlResolver.DecryptDownloadUrl(video); } /* * Create the video downloader. * The first argument is the video to download. * The second argument is the path to save the video file.*/varvideoDownloader=newVideoDownloader(video, Path.Combine("D:/Downloads", video.Title+video.VideoExtension)); // Register the ProgressChanged event and print the current progressvideoDownloader.DownloadProgressChanged+= (sender, args) =>Console.WriteLine(args.ProgressPercentage); /* * Execute the video downloader. * For GUI applications note, that this method runs synchronously.*/videoDownloader.Execute();
Download the audio track
/* * We want the first extractable video with the highest audio quality.*/VideoInfovideo=videoInfos .Where(info=>info.CanExtractAudio) .OrderByDescending(info=>info.AudioBitrate) .First(); /* * If the video has a decrypted signature, decipher it*/if (video.RequiresDecryption) { DownloadUrlResolver.DecryptDownloadUrl(video); } /* * Create the audio downloader. * The first argument is the video where the audio should be extracted from. * The second argument is the path to save the audio file.*/varaudioDownloader=newAudioDownloader(video, Path.Combine("D:/Downloads", video.Title+video.AudioExtension)); // Register the progress events. We treat the download progress as 85% of the progress and the extraction progress only as 15% of the progress,// because the download will take much longer than the audio extraction.audioDownloader.DownloadProgressChanged+= (sender, args) =>Console.WriteLine(args.ProgressPercentage*0.85); audioDownloader.AudioExtractionProgressChanged+= (sender, args) =>Console.WriteLine(85+args.ProgressPercentage*0.15); /* * Execute the audio downloader. * For GUI applications note, that this method runs synchronously.*/audioDownloader.Execute();
-