musicutil/src/utils/ffprobe/mod.rs

48 lines
1.1 KiB
Rust
Raw Normal View History

2023-10-18 14:47:03 +01:00
mod ffprobe_output;
pub mod errors;
pub mod types;
use std::{
convert::Into,
path::Path,
2023-10-18 14:47:03 +01:00
process::Command,
};
use self::errors::{AnalyzeError, FFProbeError};
pub fn analyze(path: &Path) -> Result<types::FFProbeData, AnalyzeError> {
2023-10-18 14:47:03 +01:00
let output = Command::new(crate::meta::FFPROBE)
.args([
"-v",
"quiet",
"-print_format",
"json",
"-show_format",
path.to_str().unwrap(),
])
.output();
if let Err(err) = output {
return Err(AnalyzeError::IOError(err));
}
let output = output.unwrap();
if !output.status.success() {
return Err(AnalyzeError::FFProbeError(FFProbeError {
exit_status: output.status,
stderr: String::from_utf8(output.stderr).unwrap(),
}));
}
let output = String::from_utf8(output.stdout).unwrap();
let ffprobe_out: serde_json::Result<ffprobe_output::FFProbeOutput> =
serde_json::from_str(output.as_str());
let ffprobe_out = ffprobe_out.unwrap();
Ok(types::FFProbeData {
2023-10-18 14:47:03 +01:00
tags: ffprobe_out.format.tags.into(),
})
2023-10-18 14:47:03 +01:00
}