61 lines
1.1 KiB
Go
61 lines
1.1 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"io"
|
||
|
"net/http"
|
||
|
"os"
|
||
|
"strings"
|
||
|
|
||
|
"github.com/asticode/go-astisub"
|
||
|
)
|
||
|
|
||
|
func downloadAndConvertSubtitles(subtitlesURLs string) ([]string, error) {
|
||
|
var subtitlePaths []string
|
||
|
urls := strings.Split(subtitlesURLs, ",")
|
||
|
|
||
|
for _, url := range urls {
|
||
|
vttPath, err := downloadSubtitle(url)
|
||
|
if err != nil {
|
||
|
return nil, fmt.Errorf("error downloading subtitle: %v", err)
|
||
|
}
|
||
|
|
||
|
srtPath, err := convertVTTtoSRT(vttPath)
|
||
|
if err != nil {
|
||
|
return nil, fmt.Errorf("error converting subtitle: %v", err)
|
||
|
}
|
||
|
|
||
|
subtitlePaths = append(subtitlePaths, srtPath)
|
||
|
}
|
||
|
|
||
|
return subtitlePaths, nil
|
||
|
}
|
||
|
|
||
|
func downloadSubtitle(url string) (string, error) {
|
||
|
resp, err := http.Get(url)
|
||
|
if err != nil {
|
||
|
return "", err
|
||
|
}
|
||
|
defer resp.Body.Close()
|
||
|
|
||
|
tempFile, err := os.CreateTemp("", "subtitle_*.vtt")
|
||
|
if err != nil {
|
||
|
return "", err
|
||
|
}
|
||
|
defer tempFile.Close()
|
||
|
|
||
|
_, err = io.Copy(tempFile, resp.Body)
|
||
|
if err != nil {
|
||
|
return "", err
|
||
|
}
|
||
|
|
||
|
return tempFile.Name(), nil
|
||
|
}
|
||
|
|
||
|
func convertVTTtoSRT(vttPath string) (string, error) {
|
||
|
srtPath := strings.TrimSuffix(vttPath, ".vtt") + ".srt"
|
||
|
s1, _ := astisub.OpenFile(vttPath)
|
||
|
s1.Write(srtPath)
|
||
|
return srtPath, nil
|
||
|
}
|