Files
transcriber/internal/adapter/ffmpeg/ffmpeg_converter.go

50 lines
1.4 KiB
Go

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
}