feat: Add ffmpeg remuxing for faststart

This commit is contained in:
2026-04-13 16:37:52 +02:00
parent fbf8681df0
commit 73692b0a02
7 changed files with 420 additions and 236 deletions
+45
View File
@@ -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");
}