ytd-rs

Build status crates.io docs.rs

An async, feature-rich Rust wrapper for yt-dlp.

Features

  • Async API: Built on top of tokio.
  • Builder Pattern: Fluent API for configuring downloads.
  • Structured Metadata: Extract video info as JSON via serde.
  • Custom Arguments: Passthrough for any yt-dlp flag.

Prerequisites

You must have yt-dlp installed and available in your PATH.

Usage

Simple Download

use ytd_rs::YtDlp;
use std::path::PathBuf;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let ytd = YtDlp::new("https://www.youtube.com/watch?v=uTO0KnDsVH0")
        .output_dir(PathBuf::from("./downloads"))
        .arg("--quiet");

    let result = ytd.download().await?;
    println!("Output: {}", result.output());
    Ok(())
}

Extract Audio

use ytd_rs::YtDlp;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    YtDlp::new("https://www.youtube.com/watch?v=uTO0KnDsVH0")
        .extract_audio(true)
        .audio_format("mp3")
        .download()
        .await?;
    Ok(())
}

Get Video Metadata

use ytd_rs::YtDlp;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let ytd = YtDlp::new("https://www.youtube.com/watch?v=uTO0KnDsVH0");
    let infos = ytd.get_info().await?;
    
    for info in infos {
        println!("Title: {}", info.title);
        println!("Duration: {:?}", info.duration);
    }
    Ok(())
}

License

MIT

S
Description
No description provided
Readme MIT
72 KiB
0 Stars 1 Watchers 0 Forks
Languages
Rust 100%