YoutubeExtractor 是一个针对 .NET 的,使用 C# 编写的库,其可以让你 从 YouTube 下载视频 和/或 从这些视频中提取它们的音轨(音轨提取目前只可用于 flash 视频) 。
.NET Framework 3.5 或更高版本
Windows Phone 8
WinRT
Xamarin.Android
Xamarin.iOS
注意:Windows Phone 8,WinRT,Xamarin.Anroid 以及 Xamarin.iOS 仅仅支持下载 URLs 的提取。
获取下载 URLs
// Our test youtube link string link = "insert youtube link"; /* * 获取可用的视频格式 * 我们将会在视频和音频下载事例中使用这些格式 */ IEnumerable<VideoInfo> videoInfos = DownloadUrlResolver.GetDownloadUrls(link);
下载视频
/* * 选择具有 360p 分辨率的第一个发现的 .mp4 视频 */ VideoInfo video = 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); } /* * 创建视频下载器 * 第一个参数为要下载的视频 * 第二个参数为要将视频文件保存到的路径 */ var videoDownloader = new VideoDownloader(video, Path.Combine("D:/Downloads", video.Title + video.VideoExtension)); // Register the ProgressChanged event and print the current progress videoDownloader.DownloadProgressChanged += (sender, args) => Console.WriteLine(args.ProgressPercentage); /* * Execute the video downloader. * For GUI applications note, that this method runs synchronously. */ videoDownloader.Execute();
下载音轨
/* * 我们想要具有最高音频质量的第一个可进行提取的视频 */ VideoInfo video = videoInfos .Where(info => info.CanExtractAudio) .OrderByDescending(info => info.AudioBitrate) .First(); /* * 如果视频有一个解密签名,解码它 */ if (video.RequiresDecryption) { DownloadUrlResolver.DecryptDownloadUrl(video); } /* * 创建音频下载器 * 第一个参数为要从中提取音频的视频 * 第二个参数为要将音频文件保存到的路径 */ var audioDownloader = new AudioDownloader(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); /* * 执行音频下载器 * 对于 GUI 应用程序来说,该方法会异步运行 */ audioDownloader.Execute();