https://github.com/mithronn/rusty_ytdl
A Rust library for Youtube video searcher and downloader
https://github.com/mithronn/rusty_ytdl
rust youtube youtube-dl youtube-downloader youtube-search
Last synced: about 1 year ago
JSON representation
A Rust library for Youtube video searcher and downloader
- Host: GitHub
- URL: https://github.com/mithronn/rusty_ytdl
- Owner: Mithronn
- License: mit
- Created: 2022-11-26T15:43:34.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2024-10-07T21:25:30.000Z (over 1 year ago)
- Last Synced: 2024-10-18T23:28:30.883Z (over 1 year ago)
- Topics: rust, youtube, youtube-dl, youtube-downloader, youtube-search
- Language: Rust
- Homepage: https://docs.rs/rusty_ytdl
- Size: 430 KB
- Stars: 99
- Watchers: 5
- Forks: 19
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
#
rusty_ytdl
[](https://crates.io/crates/rusty_ytdl)
[](https://docs.rs/rusty_ytdl)
Youtube searching and downloading module written with **pure Rust**.
Download videos **blazing-fast** without getting stuck on Youtube download speed (Downloads 20MB video files in just 10 seconds!)
## Overview
- [Roadmap](#roadmap)
- [Features](#features)
- [Usage](#usage)
- [Limitations](#limitations)
## Roadmap
- [ ] benchmarks
## Features
- Download live and non-live videos
- Search with query (Video, Playlist, Channel)
- Blocking and asynchronous API
- Proxy, IPv6, and cookie support on request
- Built-in FFmpeg audio and video filter apply support (Non-live videos only) [Example](examples/download_with_ffmpeg.rs)
- [CLI](https://crates.io/crates/rusty_ytdl-cli)
# Usage
```rust,ignore
use rusty_ytdl::Video;
#[tokio::main]
async fn main() {
let video_url = "https://www.youtube.com/watch?v=FZ8BxMU3BYc"; // FZ8BxMU3BYc works too!
let video = Video::new(url).unwrap();
let stream = video.stream().await.unwrap();
while let Some(chunk) = stream.chunk().await.unwrap() {
// Do what you want with chunks
println!("{:#?}", chunk);
}
// Or direct download to path
let path = std::path::Path::new(r"test.mp3");
video.download(path).await.unwrap();
//
// Or with options
//
let video_options = VideoOptions {
quality: VideoQuality::Lowest,
filter: VideoSearchOptions::Audio,
..Default::default()
};
let video = Video::new_with_options(url, video_options).unwrap();
let stream = video.stream().await.unwrap();
while let Some(chunk) = stream.chunk().await.unwrap() {
// Do what you want with chunks
println!("{:#?}", chunk);
}
// Or direct download to path
let path = std::path::Path::new(r"test.mp3");
video.download(path).await.unwrap();
}
```
or get only video informations
```rust,ignore
use rusty_ytdl::Video;
use rusty_ytdl::{choose_format,VideoOptions};
#[tokio::main]
async fn main() {
let video_url = "https://www.youtube.com/watch?v=FZ8BxMU3BYc"; // FZ8BxMU3BYc works too!
// Also works with live videos!!
let video = Video::new(url).unwrap();
let video_info = video.get_info().await.unwrap();
println!("{:#?}",video_info);
/*
VideoInfo {
dash_manifest_url: Option,
hls_manifest_url: Option,
video_details: VideoDetails,
formats: Vec,
related_videos: Vec
}
*/
let video_options = VideoOptions {
quality: VideoQuality::Lowest,
filter: VideoSearchOptions::Audio,
..Default::default()
};
let format = choose_format(&video_info.unwrap().formats,&video_options);
println!("{:#?}",format);
// Or with options
let video = Video::new_with_options(url, video_options.clone()).unwrap();
let format = choose_format(&video_info.formats, &video_options);
let video_info = video.get_info().await.unwrap();
println!("{:#?}",video_info);
}
```
For more examples, check [examples](examples/)
## Limitations
rusty_ytdl cannot download videos that fall into the following
- Regionally restricted (requires a [proxy](examples/proxy.rs))
- Private (if you have access, requires [cookies](examples/cookies.rs))
- Rentals (if you have access, requires [cookies](examples/cookies.rs))
- YouTube Premium content (if you have access, requires [cookies](examples/cookies.rs))
- Only [HLS Livestreams](https://en.wikipedia.org/wiki/HTTP_Live_Streaming) are currently supported. Other formats not will be fetch
Generated download links are valid for 6 hours, and may only be downloadable from the same IP address.
### Ratelimits
When doing to many requests YouTube might block. This will result in your requests getting denied with HTTP Status Code 429. The following steps might help you:
- Use proxies (you can find an example [proxy](examples/proxy.rs))
- Extend on the Proxy Idea by rotating (IPv6)Addresses (you can find an example [IPv6](examples/ipv6.rs))
- Use cookies (you can find an example [cookies](examples/cookies.rs))
- for this to take effect you have to first wait for the current ratelimit to expire!
- Wait it out
# Installation
```bash
cargo add rusty_ytdl
```
Or add the following to your `Cargo.toml` file:
```toml
[dependencies]
rusty_ytdl = "0.7.4"
```