package ffmpeg import ( "fmt" "os" "os/exec" ) const ffmpegExecutable = "ffmpeg" type FfmpegConverter struct { } func NewFfmpegConverter() *FfmpegConverter { return &FfmpegConverter{} } func (c *FfmpegConverter) Convert(src, dest string) error { // Проверяем существование исходного файла if _, err := os.Stat(src); os.IsNotExist(err) { return fmt.Errorf("input file does not exist: %s", src) } // Проверяем, что ffmpeg доступен в системе if _, err := exec.LookPath(ffmpegExecutable); err != nil { return fmt.Errorf("ffmpeg not found in PATH: %w", err) } // Создаем команду ffmpeg для конвертации в OGG cmd := exec.Command(ffmpegExecutable, "-i", src, // входной файл "-c:a", "libvorbis", // кодек Vorbis для OGG "-q:a", "4", // качество аудио (0-10, где 4 - хорошее качество) "-y", // перезаписать выходной файл если существует dest, // выходной файл ) // Выполняем команду if err := cmd.Run(); err != nil { return fmt.Errorf("ffmpeg conversion failed: %w", err) } // Проверяем, что выходной файл был создан if _, err := os.Stat(dest); os.IsNotExist(err) { return fmt.Errorf("output file was not created: %s", dest) } return nil }