59 lines
2.1 KiB
Rust
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 },
|
|
}
|
|
}
|
|
} |