feat: Add ffmpeg remuxing for faststart
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
use std::path::PathBuf;
|
||||
|
||||
use doctate_server::transcribe::ffmpeg::remux_faststart;
|
||||
|
||||
fn fixture(name: &str) -> PathBuf {
|
||||
PathBuf::from(env!("CARGO_MANIFEST_DIR"))
|
||||
.join("tests/fixtures")
|
||||
.join(name)
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn ffmpeg_remux_produces_valid_output() {
|
||||
let input = fixture("sample.m4a");
|
||||
assert!(input.exists(), "fixture missing: {}", input.display());
|
||||
|
||||
let output = remux_faststart(&input)
|
||||
.await
|
||||
.expect("remux failed");
|
||||
|
||||
let meta = std::fs::metadata(output.path()).expect("output missing");
|
||||
assert!(meta.len() > 0, "output file is empty");
|
||||
|
||||
// Sanity check: ffprobe should still recognize it as an m4a/mp4 container.
|
||||
let probe = std::process::Command::new("ffprobe")
|
||||
.arg("-hide_banner")
|
||||
.arg("-loglevel")
|
||||
.arg("error")
|
||||
.arg("-show_entries")
|
||||
.arg("format=format_name")
|
||||
.arg("-of")
|
||||
.arg("default=nw=1:nk=1")
|
||||
.arg(output.path())
|
||||
.output()
|
||||
.expect("ffprobe spawn failed");
|
||||
assert!(probe.status.success(), "ffprobe failed");
|
||||
let fmt = String::from_utf8_lossy(&probe.stdout);
|
||||
assert!(fmt.contains("mp4") || fmt.contains("m4a"), "unexpected format: {fmt}");
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn ffmpeg_remux_fails_on_missing_input() {
|
||||
let input = PathBuf::from("/nonexistent/does-not-exist.m4a");
|
||||
let result = remux_faststart(&input).await;
|
||||
assert!(result.is_err(), "expected error for missing input");
|
||||
}
|
||||
Reference in New Issue
Block a user