YoutubeExplodeZ.Converter
6.2.12
dotnet add package YoutubeExplodeZ.Converter --version 6.2.12
NuGet\Install-Package YoutubeExplodeZ.Converter -Version 6.2.12
<PackageReference Include="YoutubeExplodeZ.Converter" Version="6.2.12" />
paket add YoutubeExplodeZ.Converter --version 6.2.12
#r "nuget: YoutubeExplodeZ.Converter, 6.2.12"
// Install YoutubeExplodeZ.Converter as a Cake Addin #addin nuget:?package=YoutubeExplodeZ.Converter&version=6.2.12 // Install YoutubeExplodeZ.Converter as a Cake Tool #tool nuget:?package=YoutubeExplodeZ.Converter&version=6.2.12
YoutubeExplode.Converter
YoutubeExplode.Converter is an extension package for YoutubeExplode that provides the capability to download YouTube videos by muxing separate streams into a single file. This package relies on FFmpeg under the hood.
Install
- 📦 NuGet:
dotnet add package YoutubeExplode.Converter
Warning: This package requires the FFmpeg CLI to work, which can be downloaded here. Ensure that it's located in your application's probe directory or on the system's
PATH
, or provide a custom location yourself using one of the available method overloads.
Usage
YoutubeExplode.Converter exposes its functionality by enhancing YoutubeExplode's clients with additional extension methods. To use them, simply add the corresponding namespace and follow the examples below.
Downloading videos
You can download a video directly to a file through one of the extension methods provided on VideoClient
.
For example, to download a video in the specified format using the highest quality streams, simply call DownloadAsync(...)
with the video ID and the destination path:
using YoutubeExplode;
using YoutubeExplode.Converter;
var youtube = new YoutubeClient();
var videoUrl = "https://youtube.com/watch?v=u_yIGGhubZs";
await youtube.Videos.DownloadAsync(videoUrl, "video.mp4");
Under the hood, this resolves the video's media streams, downloads the best candidates based on format, bitrate, framerate, and quality, and muxes them together into a single file.
Note: If the specified output format is a known audio-only container (e.g.
mp3
orogg
) then only the audio stream is downloaded.
Warning: Stream muxing is a resource-intensive process, especially when transcoding is involved. To avoid transcoding, consider specifying either
mp4
orwebm
for the output format, as these are the containers that YouTube uses for most of its streams.
Customizing the conversion process
To configure various aspects of the conversion process, use the following overload of DownloadAsync(...)
:
using YoutubeExplode;
using YoutubeExplode.Converter;
var youtube = new YoutubeClient();
var videoUrl = "https://youtube.com/watch?v=u_yIGGhubZs";
await youtube.Videos.DownloadAsync(videoUrl, "video.mp4", o => o
.SetContainer("webm") // override format
.SetPreset(ConversionPreset.UltraFast) // change preset
.SetFFmpegPath("path/to/ffmpeg") // custom FFmpeg location
);
Manually selecting streams
If you need precise control over which streams are used for the muxing process, you can also provide them yourself instead of relying on the automatic resolution:
using YoutubeExplode;
using YoutubeExplode.Videos.Streams;
using YoutubeExplode.Converter;
var youtube = new YoutubeClient();
// Get stream manifest
var videoUrl = "https://youtube.com/watch?v=u_yIGGhubZs";
var streamManifest = await youtube.Videos.Streams.GetManifestAsync(videoUrl);
// Select best audio stream (highest bitrate)
var audioStreamInfo = streamManifest
.GetAudioStreams()
.Where(s => s.Container == Container.Mp4)
.GetWithHighestBitrate();
// Select best video stream (1080p60 in this example)
var videoStreamInfo = streamManifest
.GetVideoStreams()
.Where(s => s.Container == Container.Mp4)
.First(s => s.VideoQuality.Label == "1080p60");
// Download and mux streams into a single file
var streamInfos = new IStreamInfo[] { audioStreamInfo, videoStreamInfo };
await youtube.Videos.DownloadAsync(streamInfos, new ConversionRequestBuilder("video.mp4").Build());
Warning: Stream muxing is a resource-intensive process, especially when transcoding is involved. To avoid transcoding, consider prioritizing streams that are already encoded in the desired format (e.g.
mp4
orwebm
).
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 is compatible. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 is compatible. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 is compatible. |
.NET Framework | net461 is compatible. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETCoreApp 3.1
- CliWrap (>= 3.6.0)
- YoutubeExplodeZ (>= 6.2.12)
-
.NETFramework 4.6.1
- CliWrap (>= 3.6.0)
- YoutubeExplodeZ (>= 6.2.12)
-
.NETStandard 2.0
- CliWrap (>= 3.6.0)
- YoutubeExplodeZ (>= 6.2.12)
-
.NETStandard 2.1
- CliWrap (>= 3.6.0)
- YoutubeExplodeZ (>= 6.2.12)
-
net5.0
- CliWrap (>= 3.6.0)
- YoutubeExplodeZ (>= 6.2.12)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
6.2.12 | 258 | 4/27/2023 |