ffmpeg_sidecar/
version.rs1use anyhow::Context;
4
5use crate::command::BackgroundCommand;
6use crate::{event::FfmpegEvent, log_parser::FfmpegLogParser, paths::ffmpeg_path};
7use std::ffi::OsStr;
8use std::process::{Command, Stdio};
9
10pub fn ffmpeg_version() -> anyhow::Result<String> {
12 ffmpeg_version_with_path(ffmpeg_path())
13}
14
15pub fn ffmpeg_version_with_path<S: AsRef<OsStr>>(path: S) -> anyhow::Result<String> {
18 let mut cmd = Command::new(&path)
19 .create_no_window()
20 .arg("-version")
21 .stdout(Stdio::piped()) .spawn()?;
23 let stdout = cmd.stdout.take().context("No standard output channel")?;
24 let mut parser = FfmpegLogParser::new(stdout);
25
26 let mut version: Option<String> = None;
27 while let Ok(event) = parser.parse_next_event() {
28 match event {
29 FfmpegEvent::ParsedVersion(v) => version = Some(v.version),
30 FfmpegEvent::LogEOF => break,
31 _ => {}
32 }
33 }
34 let exit_status = cmd.wait()?;
35 if !exit_status.success() {
36 anyhow::bail!("ffmpeg -version exited with non-zero status");
37 }
38 version.context("Failed to parse ffmpeg version")
39}