clipped k

main
Bel LaPointe 2023-12-26 21:26:48 -05:00
parent 75534a383c
commit e0ababb7b6
1 changed files with 34 additions and 3 deletions

View File

@ -1,6 +1,21 @@
use std::str::FromStr; use std::str::FromStr;
use core::cmp::Ordering; use core::cmp::Ordering;
fn clip(output: &String, input: &String, start: f32, stop: f32) -> Result<(), String> {
match std::process::Command::new("ffmpeg")
.args([
"-y",
"-ss", &start.to_string(),
"-i", input,
"-t", &(stop - start).to_string(),
output,
])
.output() {
Ok(_) => Ok(()),
Err(msg) => Err(format!("failed to ffmpeg clip {}: {}", input, msg)),
}
}
fn inspect(file: &String) -> Result<Inspection, String> { fn inspect(file: &String) -> Result<Inspection, String> {
match std::process::Command::new("ffmpeg") match std::process::Command::new("ffmpeg")
.args([ .args([
@ -20,7 +35,7 @@ fn inspect(file: &String) -> Result<Inspection, String> {
lines: line_iter.map(|x| x.to_string()).collect(), lines: line_iter.map(|x| x.to_string()).collect(),
}) })
}, },
Err(msg) => Err(format!("failed to ffmpeg {}: {}", file, msg)), Err(msg) => Err(format!("failed to ffmpeg inspect {}: {}", file, msg)),
} }
} }
@ -161,11 +176,27 @@ impl Inspection {
#[cfg(test)] #[cfg(test)]
mod test_inspection { mod test_inspection {
use super::*; use super::*;
const FILE: &str = "/Users/breel/Movies/bel_1_1.mp4";
#[test]
fn test_clip() {
let output = format!("{}.clipped.mp4", FILE);
clip(
&output,
&FILE.to_string(),
3.0,
5.0,
).unwrap();
let inspection = inspect(&output);
assert_eq!(true, inspection.is_ok());
let inspection = inspection.unwrap();
assert_eq!(2.0, inspection.duration());
}
#[test] #[test]
fn test_inspect() { fn test_inspect() {
let file = "/Users/breel/Movies/bel_1_1.mp4".to_string(); let inspection = inspect(&FILE.to_string());
let inspection = inspect(&file);
assert_eq!(true, inspection.is_ok()); assert_eq!(true, inspection.is_ok());
let inspection = inspection.unwrap(); let inspection = inspection.unwrap();