Translate an uploaded video
Stages one bounded video upload and starts an asynchronous translation request.
Accepts the same settings as POST /v1/video-translate/generate as form fields.
Subtitles may be sent inline in the config field or as native file parts
source_srt and target_srt.<language> (for example target_srt.de); sending the
same subtitle both ways is rejected. Parts may arrive in any order; validation that
needs every field runs after the whole body is read but before a request is created,
and the staged video is discarded on every failure. Both transports produce the same
normalized, persisted config.
Limits: video 2 GiB; whole body 2 GiB + 9 MiB; part names 64 bytes; config field
6 MiB; other text fields 64 KiB; at most 11 SRT parts (one source plus one per
allowed target language); each SRT part 1 MiB (rejected, never truncated); all SRTs
5 MiB. target_srt.<language> must name a supported language; invalid names are
rejected before the part is read.
Translate an uploaded video
package main
import (
"bytes"
"context"
"fmt"
"io"
"github.com/chamelaion/chamelaion-go/v2"
"github.com/chamelaion/chamelaion-go/v2/option"
"github.com/chamelaion/chamelaion-go/v2/shared"
)
func main() {
client := githubcomchamelaionchamelaiongo.NewClient(
option.WithBearerToken("My Bearer Token"),
)
response, err := client.VideoTranslate.GenerateWithMedia(context.TODO(), githubcomchamelaionchamelaiongo.VideoTranslateGenerateWithMediaParams{
TargetLanguages: githubcomchamelaionchamelaiongo.F[githubcomchamelaionchamelaiongo.VideoTranslateGenerateWithMediaParamsTargetLanguagesUnion](shared.UnionString("string")),
Video: githubcomchamelaionchamelaiongo.F(io.Reader(bytes.NewBuffer([]byte("Example data")))),
})
if err != nil {
panic(err.Error())
}
fmt.Printf("%+v\n", response.RequestID)
}
{
"status": "success",
"request_id": "4c98dd00-a982-47d9-a8d6-e1f0b35a8944"
}{
"error": "target_languages must contain at least one language"
}{
"error": "duplicate target language \"de\""
}{
"error": "input must be a video file"
}{
"error": "config must be a valid JSON object"
}{
"error": "config.source_srt is not a valid SRT file: Line 2: invalid time format, 00:00:01 --> 00:00:02, expecting in '00:00:04,139 --> 00:00:04,799' format"
}{
"error": "config.target_srts.fr: language \"fr\" is not listed in target_languages"
}{
"error": "source_srt must be supplied either in config or as a multipart file, not both"
}{
"error": "config.speaker_voices key \"speaker-1\" must be a non-negative integer speaker ID such as \"1\""
}{
"error": "speaker_voices references unknown or unavailable voice IDs: \"missing-voice\""
}{
"error": "missing authorization header"
}{
"error": "invalid authorization format"
}{
"error": "missing token"
}{
"error": "invalid token"
}{
"error": "unauthorized"
}{
"error": "multipart request exceeds the size limit (2 GiB video plus 9 MiB for form fields, config and SRT files)"
}{
"error": "rate limit exceeded"
}{
"error": "internal error"
}Returns Examples
{
"status": "success",
"request_id": "4c98dd00-a982-47d9-a8d6-e1f0b35a8944"
}{
"error": "target_languages must contain at least one language"
}{
"error": "duplicate target language \"de\""
}{
"error": "input must be a video file"
}{
"error": "config must be a valid JSON object"
}{
"error": "config.source_srt is not a valid SRT file: Line 2: invalid time format, 00:00:01 --> 00:00:02, expecting in '00:00:04,139 --> 00:00:04,799' format"
}{
"error": "config.target_srts.fr: language \"fr\" is not listed in target_languages"
}{
"error": "source_srt must be supplied either in config or as a multipart file, not both"
}{
"error": "config.speaker_voices key \"speaker-1\" must be a non-negative integer speaker ID such as \"1\""
}{
"error": "speaker_voices references unknown or unavailable voice IDs: \"missing-voice\""
}{
"error": "missing authorization header"
}{
"error": "invalid authorization format"
}{
"error": "missing token"
}{
"error": "invalid token"
}{
"error": "unauthorized"
}{
"error": "multipart request exceeds the size limit (2 GiB video plus 9 MiB for form fields, config and SRT files)"
}{
"error": "rate limit exceeded"
}{
"error": "internal error"
}