From bbcedac4e129a72995a62fca28b7791a5f338e77 Mon Sep 17 00:00:00 2001 From: mykola2312 <49044616+mykola2312@users.noreply.github.com> Date: Tue, 20 Feb 2024 23:04:41 +0200 Subject: [PATCH] implement mp3 bitrate rounding up --- src/dl/ffmpeg.rs | 11 +++++++++++ src/dl/yt_dlp.rs | 4 ++-- src/main.rs | 3 +++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/dl/ffmpeg.rs b/src/dl/ffmpeg.rs index 3ce14e1..04fa675 100644 --- a/src/dl/ffmpeg.rs +++ b/src/dl/ffmpeg.rs @@ -3,6 +3,17 @@ use super::spawn::{spawn, SpawnError}; pub struct FFMpeg {} impl FFMpeg { + const MP3_BITRATES: [u16; 14] = [ + 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, + ]; + pub fn round_mp3_bitrate(abr: f32) -> u16 { + let abr = abr.ceil() as u16; + Self::MP3_BITRATES + .into_iter() + .find(|f| abr <= *f) + .unwrap_or(320) + } + pub async fn convert_to_mp3( input_path: &str, output_path: &str, diff --git a/src/dl/yt_dlp.rs b/src/dl/yt_dlp.rs index fe5f99a..d6c8ba3 100644 --- a/src/dl/yt_dlp.rs +++ b/src/dl/yt_dlp.rs @@ -131,7 +131,7 @@ impl YtDlpInfo { #[derive(Debug)] pub enum YtDlpError { SpawnError(SpawnError), - ErrorMessage(String), // keep it separate type if we ever plan to parse yt-dlp errors + ErrorMessage(String), // keep it separate type if we ever plan to parse yt-dlp errors JsonError, } @@ -139,7 +139,7 @@ impl From for YtDlpError { fn from(value: SpawnError) -> Self { match value { SpawnError::ErrorMessage(msg) => Self::ErrorMessage(msg), - _ => Self::SpawnError(value) + _ => Self::SpawnError(value), } } } diff --git a/src/main.rs b/src/main.rs index 718fd5d..f38810a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,6 +11,7 @@ use teloxide::dispatching::UpdateHandler; use teloxide::{prelude::*, update_listeners::Polling, utils::command::BotCommands}; mod dl; +use dl::ffmpeg::FFMpeg; use dl::yt_dlp::YtDlp; type State = (); @@ -50,6 +51,8 @@ async fn main() -> anyhow::Result<()> { let audio = info.best_audio_format().unwrap(); println!("{}", audio); + println!("abr {}", FFMpeg::round_mp3_bitrate(129.492)); + Ok(()) //bot_main().await }