bumblebee/src/configuration/ffmpeg.rs

59 lines
2.1 KiB
Rust

use crate::ffmpeg::FFmpegCommandOptions;
#[derive(Serialize, Deserialize, Debug)]
pub struct ConfigFFmpegProcess {
pub threads: Option<u8>,
pub niceness: Option<u8>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct ConfigFFmpegOutputVideo {
pub codec: String,
pub bitrate: u32,
pub crf: u8,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct ConfigFFmpegOutputAudio {
pub codec: String,
pub bitrate: u32,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct ConfigFFmpegOutput {
pub format: String,
pub video: ConfigFFmpegOutputVideo,
pub audio: ConfigFFmpegOutputAudio,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct ConfigFFmpeg {
pub path: Option<String>,
pub extra_args: Option<Vec<String>>,
pub overwrite: Option<bool>,
pub process: Option<ConfigFFmpegProcess>,
pub output: ConfigFFmpegOutput,
}
impl ConfigFFmpeg {
pub fn build_command_options<S: Into<String>>(&self, input_path: S, output_path: S) -> FFmpegCommandOptions {
FFmpegCommandOptions {
input: input_path.into(),
output: output_path.into(),
video_codec: self.output.video.codec.clone(),
video_bitrate: if self.output.video.bitrate > 0 { Some(self.output.video.bitrate) } else { None },
video_crf: if self.output.video.crf > 0 { Some(self.output.video.crf) } else { None },
audio_codec: self.output.audio.codec.clone(),
audio_bitrate: if self.output.audio.bitrate > 0 { Some(self.output.audio.bitrate) } else { None },
overwrite: if self.overwrite.is_some() { Some(self.overwrite.unwrap()) } else { None },
extra_args: if self.extra_args.is_some() { self.extra_args.clone().unwrap() } else { Vec::new() },
threads: if self.process.is_some() && self.process.as_ref().unwrap().threads.is_some() { Some(self.process.as_ref().unwrap().threads.unwrap()) } else { None },
niceness: if self.process.is_some() && self.process.as_ref().unwrap().niceness.is_some() { Some(self.process.as_ref().unwrap().niceness.unwrap()) } else { None },
}
}
}