| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- using System;
- using System.Diagnostics;
- using System.IO;
- namespace SlamCross.Services;
- public static class ConversionService
- {
- private static string FfmpegPath => FindFfmpeg();
- private static string FindFfmpeg()
- {
- string[] candidates = ["/usr/bin/ffmpeg", "/usr/local/bin/ffmpeg", "ffmpeg"];
- foreach (var c in candidates)
- if (File.Exists(c)) return c;
- return "ffmpeg";
- }
- public static void ConvertToWav(string inputFile, string outputFile, int sampleRate, int channels)
- {
- var psi = new ProcessStartInfo(FfmpegPath)
- {
- RedirectStandardError = true,
- UseShellExecute = false,
- CreateNoWindow = true
- };
- psi.ArgumentList.Add("-y");
- psi.ArgumentList.Add("-i"); psi.ArgumentList.Add(inputFile);
- psi.ArgumentList.Add("-f"); psi.ArgumentList.Add("wav");
- psi.ArgumentList.Add("-flags"); psi.ArgumentList.Add("bitexact");
- psi.ArgumentList.Add("-map_metadata"); psi.ArgumentList.Add("-1");
- psi.ArgumentList.Add("-vn");
- psi.ArgumentList.Add("-acodec"); psi.ArgumentList.Add("pcm_s16le");
- psi.ArgumentList.Add("-ar"); psi.ArgumentList.Add(sampleRate.ToString());
- psi.ArgumentList.Add("-ac"); psi.ArgumentList.Add(channels.ToString());
- psi.ArgumentList.Add(outputFile);
- using var proc = Process.Start(psi) ?? throw new Exception("Failed to start ffmpeg");
- var err = proc.StandardError.ReadToEnd();
- proc.WaitForExit();
- if (proc.ExitCode != 0)
- throw new Exception($"ffmpeg failed: {err}");
- }
- }
|