YouTubeExtractor - YouTube 视频音轨提取


MIT/GPLv2
Windows
C#

软件简介

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();