# caery-lib
`caery-lib` is the reusable media conversion engine used by [Caery](https://github.com/Tknott95/KnottConverter). It validates conversion requests, builds safe `ffmpeg` commands, probes duration with `ffprobe`, and reports conversion logs and progress as events.
The crate supports video-to-audio extraction, video transcoding, and audio transcoding across Caery's supported formats and quality presets.
## Example
```no_run
use caery_lib::{
start_conversion, AudioFormat, ConversionMode, ConversionRequest, OperationEvent,
QualityPreset, VideoFormat,
};
use std::path::PathBuf;
let request = ConversionRequest {
mode: ConversionMode::ExtractAudio,
input_path: PathBuf::from("clip.mp4"),
output_path: PathBuf::from("clip.mp3"),
audio_format: AudioFormat::Mp3,
video_format: VideoFormat::Mp4,
quality: QualityPreset::Balanced,
overwrite: false,
};
let events = start_conversion(&request)?;
for event in events {
match event {
OperationEvent::Progress { current_seconds, total_seconds } => {
println!("{current_seconds:.1} / {total_seconds:.1}");
}
OperationEvent::Finished(result) => {
result.expect("ffmpeg conversion failed");
break;
}
_ => {}
}
}
# Ok::<(), caery_lib::ConversionError>(())
```
## Requirements
`ffmpeg` performs conversions and `ffprobe` provides duration information. Both executables must be available on `PATH` at runtime.