feat: implement robust format identification, plugin availability checks, and automatic conversion path rerouting on failure
Release / check-release (push) Successful in 16s
Release / build_gnu (push) Skipped
Release / build_musl (push) Skipped
Release / build_windows (push) Skipped
Release / package_gnu (deb) (push) Skipped
Release / package_gnu (rpm) (push) Skipped
Release / package_musl (deb) (push) Skipped
Release / package_musl (rpm) (push) Skipped
Release / publish-release (push) Skipped
CI / Test (push) Successful in 1m52s
CI / Build Linux (push) Successful in 2m0s
Release / check-release (push) Successful in 16s
Release / build_gnu (push) Skipped
Release / build_musl (push) Skipped
Release / build_windows (push) Skipped
Release / package_gnu (deb) (push) Skipped
Release / package_gnu (rpm) (push) Skipped
Release / package_musl (deb) (push) Skipped
Release / package_musl (rpm) (push) Skipped
Release / publish-release (push) Skipped
CI / Test (push) Successful in 1m52s
CI / Build Linux (push) Successful in 2m0s
This commit is contained in:
1 parent
a372937854
commit
d3b7d7a18f
8 files changed
+244
-97
No files matched your search
+61
-41
@@ -23,41 +23,61 @@ impl Plugin for PluginImpl {
|
||||
fn name(&self) -> &'static str {
|
||||
"ffmpeg_audio"
|
||||
}
|
||||
|
||||
fn from_formats(&self) -> Vec<&'static str> {
|
||||
vec![
|
||||
"mp3", "wav", "ogg", "flac", "aac", "m4a", "opus", "wma", "amr", "aiff", "aiff", "au",
|
||||
"mp3", "ogg", "aac", "m4a", "opus", "wma", "mka", "mp2", "ra", "wav", "flac", "alac",
|
||||
"aiff", "au", "caf", "w64", "ac3", "eac3", "dts", "truehd", "thd", "ape", "wv", "tta",
|
||||
"amr", "spx", "gsm", "voc",
|
||||
]
|
||||
}
|
||||
|
||||
fn to_formats(&self) -> Vec<&'static str> {
|
||||
vec![
|
||||
"mp3", "wav", "ogg", "flac", "aac", "m4a", "opus", "wma", "amr", "aiff", "aiff", "au",
|
||||
"mp3", "ogg", "aac", "m4a", "opus", "wma", "mka", "mp2", "ra", "wav", "flac", "alac",
|
||||
"aiff", "au", "caf", "w64", "ac3", "eac3", "dts", "truehd", "thd", "ape", "wv", "tta",
|
||||
"amr", "spx", "gsm", "voc",
|
||||
]
|
||||
}
|
||||
|
||||
fn is_available(&self) -> bool {
|
||||
std::process::Command::new("ffmpeg")
|
||||
.arg("-version")
|
||||
.output()
|
||||
.is_ok()
|
||||
}
|
||||
|
||||
fn familiarity(&self, _from: &str, to: &str) -> u8 {
|
||||
match to {
|
||||
"mp3" | "wav" => 255,
|
||||
"flac" | "m4a" | "aac" => 240,
|
||||
"ogg" | "opus" => 220,
|
||||
"wma" | "amr" => 150,
|
||||
"aiff" | "au" => 120,
|
||||
"m4a" | "aac" | "flac" => 240,
|
||||
"ogg" | "opus" | "alac" => 220,
|
||||
"ac3" | "eac3" | "dts" => 180,
|
||||
"wma" | "amr" | "mka" | "mp2" => 150,
|
||||
"aiff" | "au" | "caf" | "w64" => 120,
|
||||
"ape" | "wv" | "tta" | "truehd" | "thd" => 100,
|
||||
"spx" | "gsm" | "voc" | "ra" => 80,
|
||||
_ => 128,
|
||||
}
|
||||
}
|
||||
|
||||
fn quality(&self, _from: &str, to: &str) -> u8 {
|
||||
match to {
|
||||
"flac" | "wav" | "aiff" | "au" => 255,
|
||||
"opus" | "ogg" | "aac" | "m4a" => 220,
|
||||
"mp3" => 200,
|
||||
"wma" | "amr" => 150,
|
||||
"flac" | "wav" | "aiff" | "au" | "alac" | "ape" | "wv" | "tta" | "caf" | "w64"
|
||||
| "truehd" | "thd" => 255,
|
||||
"opus" | "ogg" | "aac" | "m4a" | "eac3" | "dts" => 220,
|
||||
"mp3" | "ac3" | "mka" | "mp2" | "ra" => 200,
|
||||
"wma" | "amr" | "spx" | "gsm" | "voc" => 150,
|
||||
_ => 128,
|
||||
}
|
||||
}
|
||||
|
||||
fn speed(&self, _from: &str, to: &str) -> u8 {
|
||||
match to {
|
||||
"wav" | "aiff" | "au" => 255,
|
||||
"flac" => 200,
|
||||
"mp3" | "aac" | "m4a" | "ogg" => 180,
|
||||
"opus" | "wma" | "amr" => 150,
|
||||
"wav" | "aiff" | "au" | "caf" | "w64" | "voc" => 255,
|
||||
"flac" | "alac" | "wv" | "mp2" | "ac3" | "dts" => 200,
|
||||
"mp3" | "aac" | "m4a" | "ogg" | "mka" | "eac3" => 180,
|
||||
"opus" | "wma" | "amr" | "ape" | "tta" | "truehd" | "thd" | "spx" | "gsm" | "ra" => 150,
|
||||
_ => 128,
|
||||
}
|
||||
}
|
||||
@@ -85,33 +105,33 @@ impl Plugin for PluginImpl {
|
||||
|
||||
let mut raw_args = vec![];
|
||||
match to {
|
||||
"mp3" => {
|
||||
raw_args.extend(vec!["-c:a", "libmp3lame", "-q:a", "2"]);
|
||||
}
|
||||
"ogg" => {
|
||||
raw_args.extend(vec!["-c:a", "libvorbis", "-q:a", "4"]);
|
||||
}
|
||||
"flac" => {
|
||||
raw_args.extend(vec!["-c:a", "flac"]);
|
||||
}
|
||||
"aac" | "m4a" => {
|
||||
raw_args.extend(vec!["-c:a", "aac", "-b:a", "192k"]);
|
||||
}
|
||||
"opus" => {
|
||||
raw_args.extend(vec!["-c:a", "libopus", "-b:a", "128k"]);
|
||||
}
|
||||
"wma" => {
|
||||
raw_args.extend(vec!["-c:a", "wmav2", "-b:a", "192k"]);
|
||||
}
|
||||
"amr" => {
|
||||
raw_args.extend(vec!["-ar", "8000", "-c:a", "libopencore_amrnb", "-b:a", "12.2k"]);
|
||||
}
|
||||
"wav" | "aiff" | "au" => {
|
||||
raw_args.extend(vec!["-c:a", "pcm_s16le"]);
|
||||
}
|
||||
_ => {
|
||||
raw_args.extend(vec!["-c:a", "copy"]);
|
||||
}
|
||||
"mp3" => raw_args.extend(vec!["-c:a", "libmp3lame", "-q:a", "2"]),
|
||||
"ogg" => raw_args.extend(vec!["-c:a", "libvorbis", "-q:a", "4"]),
|
||||
"aac" | "m4a" | "mka" => raw_args.extend(vec!["-c:a", "aac", "-b:a", "192k"]),
|
||||
"opus" => raw_args.extend(vec!["-c:a", "libopus", "-b:a", "128k"]),
|
||||
"mp2" => raw_args.extend(vec!["-c:a", "mp2", "-b:a", "192k"]),
|
||||
"wma" => raw_args.extend(vec!["-c:a", "wmav2", "-b:a", "192k"]),
|
||||
"flac" => raw_args.extend(vec!["-c:a", "flac"]),
|
||||
"alac" => raw_args.extend(vec!["-c:a", "alac"]),
|
||||
"ape" => raw_args.extend(vec!["-c:a", "ape"]),
|
||||
"wv" => raw_args.extend(vec!["-c:a", "wavpack"]),
|
||||
"tta" => raw_args.extend(vec!["-c:a", "tta"]),
|
||||
"ac3" => raw_args.extend(vec!["-c:a", "ac3", "-b:a", "384k"]),
|
||||
"eac3" => raw_args.extend(vec!["-c:a", "eac3", "-b:a", "640k"]),
|
||||
"dts" => raw_args.extend(vec!["-c:a", "dca", "-strict", "-2", "-b:a", "1536k"]),
|
||||
"truehd" | "thd" => raw_args.extend(vec!["-c:a", "truehd", "-strict", "-2"]),
|
||||
"wav" | "aiff" | "au" | "caf" | "w64" => raw_args.extend(vec!["-c:a", "pcm_s16le"]),
|
||||
"amr" => raw_args.extend(vec![
|
||||
"-ar",
|
||||
"8000",
|
||||
"-c:a",
|
||||
"libopencore_amrnb",
|
||||
"-b:a",
|
||||
"12.2k",
|
||||
]),
|
||||
"spx" => raw_args.extend(vec!["-c:a", "libspeex"]),
|
||||
"gsm" => raw_args.extend(vec!["-ar", "8000", "-c:a", "libgsm"]),
|
||||
_ => raw_args.extend(vec!["-c:a", "copy"]),
|
||||
}
|
||||
|
||||
let rt = tokio::runtime::Runtime::new().map_err(|e| e.to_string())?;
|
||||
|
||||
Reference in new issue
Block a user