use std::time::Duration;
use anyhow::{Context, Result};
use super::run_command_with_timeout;
const DOWNLOAD_TIMEOUT: Duration = Duration::from_mins(10);
pub(crate) fn download_audio(url: &str, output_path: &str, extra_args: &[&str]) -> Result<String> {
let ext = "mp3";
let mut cmd = crate::deps::yt_dlp_command().context("Failed to download audio")?;
cmd.args([
"--extract-audio",
"--audio-format",
ext,
"--audio-quality",
"0",
"--output",
output_path,
"--no-warnings",
])
.args(extra_args)
.arg(url);
let output =
run_command_with_timeout(&mut cmd, DOWNLOAD_TIMEOUT).context("Failed to download audio")?;
if !output.status.success() {
anyhow::bail!(
"yt-dlp download failed: {}",
String::from_utf8_lossy(&output.stderr)
);
}
Ok(output_path.replace("%(ext)s", ext))
}