try fix web to ogg

This commit is contained in:
RafaelEdwards 2024-11-20 12:33:16 -03:00
parent ead2e11b5f
commit c08e5637d2

22
main.go
View File

@ -77,15 +77,22 @@ func validateAPIKey(c *gin.Context) bool {
return true return true
} }
func convertAudio(inputData []byte, format string) ([]byte, int, error) { func convertAudio(inputData []byte, inputFormat string, outputFormat string) ([]byte, int, error) {
var cmd *exec.Cmd var cmd *exec.Cmd
switch format { switch outputFormat {
case "mp3": case "mp3":
cmd = exec.Command("ffmpeg", "-i", "pipe:0", "-f", "mp3", "pipe:1") cmd = exec.Command("ffmpeg", "-i", "pipe:0", "-f", "mp3", "pipe:1")
case "wav": case "wav":
cmd = exec.Command("ffmpeg", "-i", "pipe:0", "-f", "wav", "pipe:1") cmd = exec.Command("ffmpeg", "-i", "pipe:0", "-f", "wav", "pipe:1")
default: default:
cmd = exec.Command("ffmpeg", "-i", "pipe:0", "-ac", "1", "-ar", "16000", "-c:a", "libopus", "-f", "ogg", "pipe:1") if inputFormat == "webm" {
// Custom settings for webm to ogg conversion
fmt.Println("Conversão de webm para ogg")
cmd = exec.Command("ffmpeg", "-i", "pipe:0", "-acodec", "libopus", "-b:a", "16k", "-vbr", "on", "-compression_level", "10", "-ac", "1", "-ar", "16000", "-f", "ogg", "pipe:1")
} else {
// Default settings for other formats to ogg
cmd = exec.Command("ffmpeg", "-i", "pipe:0", "-acodec", "libopus", "-ac", "1", "-ar", "16000", "-f", "ogg", "pipe:1")
}
} }
outBuffer := bufferPool.Get().(*bytes.Buffer) outBuffer := bufferPool.Get().(*bytes.Buffer)
errBuffer := bufferPool.Get().(*bytes.Buffer) errBuffer := bufferPool.Get().(*bytes.Buffer)
@ -166,9 +173,10 @@ func processAudio(c *gin.Context) {
return return
} }
format := c.DefaultPostForm("format", "ogg") outputFormat := c.DefaultPostForm("output_format", "ogg")
inputFormat := c.DefaultPostForm("input_format", "ogg")
convertedData, duration, err := convertAudio(inputData, format) convertedData, duration, err := convertAudio(inputData, inputFormat, outputFormat)
if err != nil { if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return return
@ -177,7 +185,7 @@ func processAudio(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{ c.JSON(http.StatusOK, gin.H{
"duration": duration, "duration": duration,
"audio": base64.StdEncoding.EncodeToString(convertedData), "audio": base64.StdEncoding.EncodeToString(convertedData),
"format": format, "format": outputFormat,
}) })
} }