API de conversão de voz em texto para ficheiros de áudio e vídeo

Envie áudio ou vídeo pré-gravado e obtenha uma transcrição com identificação de locutores e carateres temporais para cada segmento, em 75 idiomas de origem com deteção automática de idioma. O mesmo projeto traduz para mais de 135 idiomas e variantes regionais, com legendas e áudio dobrado.
Diarização de locutores
75 idiomas de origem
REST + SDK Python
upload, transcribe, read
OAuth 2.0
# 1. upload an audio or video file by link
curl -X POST https://api.rask.ai/api/library/v1/media/link \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"link": "https://example.com/interview.mp3", "name": "interview"}'

# 2. create the project - speech recognition starts automatically
#    src_lang is optional: leave it out and the language is detected
curl -X POST https://api.rask.ai/v2/projects \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d "{\"video_id\": \"$MEDIA_ID\", \"dst_lang\": \"es-mx\"}"
GET /v2/projects/{project_id}/transcription
segments
# Read the transcript: one object per segment
curl -s https://api.rask.ai/v2/projects/$ID/transcription -H "Authorization: Bearer $TOKEN" \
  | jq '.segments[] | {speaker, start, end, text: .src.text}'
Utilizado por equipas globais
Funcionalidades

Tudo o que a API de voz para texto devolve

O reconhecimento de voz é a primeira etapa de cada projeto Rask. A transcrição surge dividida em segmentos com identificação de locutores e carateres temporais, pronta a editar, traduzir, legendar e dar voz no mesmo projeto.

Transcrever ficheiros de áudio e vídeo

Envie áudio ou vídeo pré-gravado, ou partilhe um link, e a API converte a fala em texto escrito, segmento a segmento.

Diarização de locutores

Os diferentes locutores são detetados automaticamente e cada segmento inclui uma identificação, como SPEAKER_00. Indique o número de locutores, caso o conheça, ou corrija a identificação mais tarde.

Carateres temporais para cada segmento

Cada segmento tem um momento de início e de fim no formato HH:MM:SS,mmm, pronto para legendas, pesquisa e navegação dentro de uma gravação.

75 idiomas de origem

Suporte multilingue em 75 idiomas de origem. Deixe o idioma de origem em branco para ser detetado automaticamente ou defina-o com um código de duas letras.

Tradução no mesmo segmento

Cada segmento contém o texto de origem e a respetiva tradução, em qualquer um dos mais de 135 idiomas e variantes regionais, para que a transcrição e a tradução fiquem alinhadas linha a linha.

Legendas em .srt e .vtt

Cada projeto concluído inclui ficheiros de legendas no idioma de destino, sincronizados com os segmentos da transcrição. Sem necessidade de recorrer a terceiros para as legendas.

Termos específicos na tradução

Um glossário mantém os nomes de produtos, nomes próprios e vocabulário específico consistentes quando a transcrição é traduzida ou mantida no idioma original de propósito.

Editar a transcrição através da API

Corrija uma palavra, ajuste um caráter temporal, mude de locutor, adicione ou elimine um segmento. Os revisores corrigem a transcrição final em vez de começarem do zero.

Cresça sem limites

Sem limites de taxa, quotas de concorrência ou restrições por chave. Realize transcrições em lote em toda a sua biblioteca de áudio e vídeo em paralelo.
Veja como funciona

Veja uma transcrição transformar-se em cinco versões de idiomas

O mesmo clip transcrito, traduzido e dobrado em inglês, francês, alemão, português e espanhol, mantendo o áudio de fundo original intacto.
EN flag
En
FR flag
Fr
DE flag
De
PT flag
Pt
ES flag
Es
Fluxo de trabalho

Três pedidos desde o ficheiro de áudio até à transcrição

A criação do projeto inicia o reconhecimento de fala, seguido pela tradução e dobragem na mesma execução. Utilize o endpoint /generate após editar a transcrição.
1

Carregar áudio ou vídeo

Envie um ficheiro de áudio ou vídeo como dados de formulário multipart, ou publique um link do YouTube, Google Drive, S3, Vimeo ou qualquer URL direto. Obtém um ID de multimédia e os metadados do ficheiro antes de gastar qualquer valor.

POST /api/library/v1/media/link
2

Criar o projeto

Passe o ID de multimédia como video_id e um idioma de destino. Adicione o idioma de origem ou o número de locutores, caso os conheça. O reconhecimento começa imediatamente.

POST /v2/projects
3

Ler a transcrição

Leia a transcrição assim que os respetivos segmentos estiverem disponíveis, enquanto o conteúdo multimédia traduzido continua a ser processado. Transfira os ficheiros de legendas e multimédia quando o projeto estiver concluído.

GET /v2/projects/{id}/transcription
O reconhecimento é executado em ficheiros completos e pré-gravados, e não em áudio em direto. O tempo de processamento varia consoante a duração do ficheiro, o número de locutores e o idioma de destino.
Criado a pensar em si

Precisa de um idioma ou formato que não conste da lista? Fale com a nossa equipa

Um idioma de origem fora da lista, um formato de transcrição esperado pela sua plataforma, maior capacidade de processamento ou o seu próprio método de entrega: a nossa equipa analisa as necessidades da sua integração e as opções disponíveis.

Idiomas e vozes

Precisa de um idioma fora do catálogo público? Fale com a nossa equipa sobre os seus requisitos e as opções disponíveis.

Entrega e integração

Webhooks, envio direto para a sua própria fila, entrega direta no seu S3, pontos de extremidade personalizados. Diga-nos como é que o seu sistema prefere receber os dados.

Volume e capacidade

Os tamanhos dos lotes, os idiomas de destino por ação e a prioridade de processamento são termos contratuais e não limites fixos do produto.

Segurança e alojamento

A residência de dados, o SSO e SAML, as regras de retenção e o suporte a auditorias de segurança são tratados como parte da integração empresarial.
Casos de utilização

Quem utiliza uma API de conversão de voz em texto para vídeo

Plataformas com vídeo integrado

Plataformas de LMS e educação de clientes, plataformas de criadores e de vídeo, ferramentas de webinars e eventos virtuais, SaaS de alojamento de vídeo e fluxos de trabalho, plataformas de adoção digital e compras em direto. Adicione transcrições, legendas e versões traduzidas de vídeos gravados como uma funcionalidade do seu produto.

Agências de localização e produção

Utilize a transcrição com identificação de locutores como primeira versão para os seus revisores, corrija segmentos através da API e disponibilize legendas, traduções e versões dobradas a partir do mesmo projeto.

Produção de vídeo interna e contínua

Retalho internacional e comércio eletrónico, franquias globais, editores de média e universidades corporativas. Transcreva formações gravadas, webinars e entrevistas, e publique legendas e versões em vários idiomas para cada mercado.
Histórias de clientes

Equipas reais, resultados mensuráveis

Como as empresas localizam vídeos com a Rask, através dos seus próprios números.
seta
seta
Código

Exemplos de código da API de conversão de voz em texto

Um exemplo completo em cada idioma: carregue um ficheiro de áudio ou vídeo, crie o projeto, aguarde e, em seguida, leia os segmentos da transcrição com os respetivos locutores e carateres temporais.
# pip install git+ssh://[email protected]/braskai/rask-sdk.git@main
import asyncio
from rask_sdk import clients, enums, schemas

async def main():
    client = clients.RaskSDKClient(client_id=CLIENT_ID, client_secret=CLIENT_SECRET)

    media = await client.create_media_link(data=schemas.MediaCreateLink(link="https://example.com/interview.mp3"))
    while media.status is enums.MediaStatus.PROCESSING:
        await asyncio.sleep(5)
        media = await client.get_media(media_id=media.id)

    # src_lang omitted: the source language is detected automatically
    job = await client.create_project(data=schemas.ProjectCreate(video_id=media.id, dst_lang="es-mx"))
    while job.status is not enums.ProjectStatus.MERGING_DONE:
        await asyncio.sleep(10)
        job = await client.get_project(project_id=job.id)

    transcript = await client.get_project_transcription(project_id=job.id)
    for seg in transcript.segments:
        print(seg.start, seg.end, seg.speaker, seg.src.text)

asyncio.run(main())
github.com/braskai/rask-sdk
async, typed models
import time, requests

AUTH = "https://rask-prod.auth.us-east-2.amazoncognito.com/oauth2/token"
API  = "https://api.rask.ai"
token = requests.post(AUTH, auth=(CLIENT_ID, CLIENT_SECRET),
                      data={"grant_type": "client_credentials"}).json()["access_token"]
h = {"Authorization": f"Bearer {token}"}

with open("interview.mp3", "rb") as f:
    media = requests.post(f"{API}/api/library/v1/media", headers=h,
                          params={"kind": "audio"}, files={"data": f}).json()
while media["status"] == "processing":
    time.sleep(5)
    media = requests.get(f"{API}/api/library/v1/media/{media['id']}", headers=h).json()

pid = requests.post(f"{API}/v2/projects", headers=h, json={
    "video_id": media["id"], "dst_lang": "es-mx", "num_speakers": 2}).json()["id"]
while requests.get(f"{API}/v2/projects/{pid}", headers=h).json()["status"] != "merging_done":
    time.sleep(10)

# write the source transcript as an .srt file
segments = requests.get(f"{API}/v2/projects/{pid}/transcription", headers=h).json()["segments"]
with open("interview_en.srt", "w") as out:
    for i, s in enumerate(segments, 1):
        out.write(f"{i}\n{s['start']} --> {s['end']}\n{s['speaker']}: {s['src']['text']}\n\n")
requests + polling
no SDK required
// no dependencies, Node 18+ global fetch
const API = 'https://api.rask.ai';
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
const auth = await fetch('https://rask-prod.auth.us-east-2.amazoncognito.com/oauth2/token', {
  method: 'POST',
  headers: { Authorization: 'Basic ' + btoa(`${CLIENT_ID}:${CLIENT_SECRET}`) },
  body: new URLSearchParams({ grant_type: 'client_credentials' }),
}).then((r) => r.json());
const h = { Authorization: `Bearer ${auth.access_token}`, 'Content-Type': 'application/json' };
const call = (method, path, body) => fetch(API + path, { method, headers: h, body: body && JSON.stringify(body) }).then((r) => r.json());

let media = await call('POST', '/api/library/v1/media/link', { link: 'https://example.com/webinar.mp4' });
while (media.status === 'processing') { await sleep(5000); media = await call('GET', `/api/library/v1/media/${media.id}`); }

let p = await call('POST', '/v2/projects', { video_id: media.id, src_lang: 'en', dst_lang: 'de-de' });
while (p.status !== 'merging_done') { await sleep(10000); p = await call('GET', `/v2/projects/${p.id}`); }

const { segments } = await call('GET', `/v2/projects/${p.id}/transcription`);
segments.forEach((s) => console.log(`[${s.start}] ${s.speaker}: ${s.src.text}`));
console.log(p.translation_vtt_path);   // German subtitles for your player
fetch, Node 18+
plain HTTP
# 1. token (valid 1 hour - cache and reuse it)
TOKEN=$(curl -s -X POST https://rask-prod.auth.us-east-2.amazoncognito.com/oauth2/token \
  -u "$CLIENT_ID:$CLIENT_SECRET" -d "grant_type=client_credentials" | jq -r .access_token)

# 2. upload a local audio file
MEDIA_ID=$(curl -s -X POST "https://api.rask.ai/api/library/v1/media?kind=audio" \
  -H "Authorization: Bearer $TOKEN" -F "data=@podcast_episode.mp3" | jq -r .id)

# 3. create the project once the media status is ready
ID=$(curl -s -X POST https://api.rask.ai/v2/projects \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d "{\"video_id\": \"$MEDIA_ID\", \"dst_lang\": \"fr-fr\"}" | jq -r .id)

# 4. when status is merging_done, read the transcript with speaker labels
curl -s https://api.rask.ai/v2/projects/$ID/transcription -H "Authorization: Bearer $TOKEN" \
  | jq -r '.segments[] | "\(.start) \(.speaker): \(.src.text)"'
local file upload
audio file, multipart
<?php
use GuzzleHttp\Client;

$http = new Client(['base_uri' => 'https://api.rask.ai']);
$json = fn($r) => json_decode($r->getBody(), true);
$auth = $json((new Client)->post('https://rask-prod.auth.us-east-2.amazoncognito.com/oauth2/token',
    ['auth' => [$clientId, $clientSecret], 'form_params' => ['grant_type' => 'client_credentials']]));
$h = ['Authorization' => 'Bearer ' . $auth['access_token']];

$media = $json($http->post('/api/library/v1/media/link', ['headers' => $h, 'json' => [
    'link' => 'https://example.com/interview.mp3']]));
while ($media['status'] === 'processing') {
    sleep(5);
    $media = $json($http->get("/api/library/v1/media/{$media['id']}", ['headers' => $h]));
}

$p = $json($http->post('/v2/projects', ['headers' => $h, 'json' => [
    'video_id' => $media['id'], 'dst_lang' => 'es-mx']]));
while ($p['status'] !== 'merging_done') {
    sleep(10);
    $p = $json($http->get("/v2/projects/{$p['id']}", ['headers' => $h]));
}

$t = $json($http->get("/v2/projects/{$p['id']}/transcription", ['headers' => $h]));
foreach ($t['segments'] as $s) {
    echo $s['start'], ' ', $s['speaker'], ': ', $s['src']['text'], PHP_EOL;
}
Guzzle 7
plain HTTP
O Python é o SDK oficial. Os separadores Node, PHP e cURL são exemplos simples de HTTP para os mesmos pontos de finalização.
Progresso

Como um projeto de transcrição reporta o progresso

A transcrição é a primeira etapa de um projeto com estados documentados, permitindo-lhe acompanhar o progresso real em gravações longas. Só precisa de interagir com três grupos.

Concluído com sucesso, parar por aqui

merging_done
Os ficheiros finais de multimédia e legendas estão prontos. A transcrição pode ser lida mais cedo, assim que os respetivos segmentos estiverem disponíveis.

Em progresso, continuar a verificar

created
uploading
transcription_started
separate_background_started
determine_speakers_started
translation_started
voiceover_started
merging_started
Para além da correspondência _done estados. Estes correspondem perfeitamente a uma interface de progresso por etapas.

Falha, parar e reportar

failed
upload_failed
transcription_failed
translation_failed
voiceover_failed
merging_failed
no_audio
no_words
forbidden_link
no_audio, no_words e forbidden_link são suficientemente específicos para serem mostrados diretamente ao seu próprio utilizador.
Two speakers
GET /v2/projects/{id}/transcription
{"segments": [
  {"speaker": "SPEAKER_00", "start": "00:00:00,320", "end": "00:00:07,316", "status": "done",
   "src": {"text": "Thanks for joining us. Let's start with the new release.", "lang": "en"},
   "dst": {"text": "Gracias por acompañarnos. Empecemos con la nueva versión.", "lang": "es-mx"}},
  {"speaker": "SPEAKER_01", "start": "00:00:07,640", "end": "00:00:11,900", "status": "done",
   "src": {"text": "Sure. The biggest change is the reporting view.", "lang": "en"},
   "dst": {"text": "Claro. El cambio más grande es la vista de reportes.", "lang": "es-mx"}}
]}

Ou ignore a consulta de estado por completo

Aponte-nos para um ponto final de webhook e cada transição de estado chega como um POST, para que a sua fila reaja a cada alteração no momento em que acontece. A entrega por webhook faz parte da integração empresarial.
Ler a documentação
preserveAspectRatio="xMidYMid meet" aria-hidden="true" role="img">
Saída

Segmentos de transcrição, legendas e multimédia traduzida

Leia a transcrição como segmentos JSON a partir do endpoint de transcrição. O projeto concluído também disponibiliza ficheiros de legendas em formato SRT e VTT no idioma de destino, o vídeo traduzido e, nos planos elegíveis, a voz traduzida como uma faixa WAV separada.
Campo
Formato
O que é
segments
JSON
Transcrição: texto de origem, tradução, etiqueta de locutor, hora de início e de fim para cada segmento
voiceover
WAV
Apenas voz traduzida, sem som de fundo, nos planos elegíveis
translated_audio
WAV
Fala traduzida misturada com o áudio de fundo original
translation_srt_path
.srt
Legendas no idioma de destino, sincronizadas com os segmentos
translation_vtt_path
.vtt
As mesmas legendas em formato WebVTT, para leitores web
translated_video
MP4
O vídeo traduzido com dobragem
Controlo

Corrija a transcrição segmento a segmento

O reconhecimento de voz dá-lhe a primeira versão. Corrija uma palavra, um carimbo de data/hora ou um rótulo de orador com um pedido por segmento e, em seguida, volte a gerar a versão traduzida. A nova geração é cobrada com base nos segmentos alterados, com um mínimo de um minuto por execução.

Edição ao nível de segmento

Edição ao nível de segmento
Cada projeto expõe a sua transcrição como segmentos endereçáveis, pelo que uma correção à transcrição final é um único pedido de alteração.
Obter a transcrição e os respetivos segmentos
Alterar o texto de origem para traduzirmos novamente
Alterar o texto traduzido diretamente para manter as suas próprias palavras
Ajustar os carateres temporais, adicionar segmentos, eliminar segmentos
Reatribuir a voz associada a qualquer orador

Glossários para terminologia

Glossários para terminologia
Quando a transcrição é traduzida, um glossário mantém os nomes de marcas, nomes próprios e termos técnicos iguais em todas as versões, ou no idioma original de propósito.

Um glossário abrange um par de línguas e aplica-se a todas as variantes regionais dessa língua de destino, pelo que um único glossário de espanhol serve es-mx e es-es igualmente. O registo do projeto glossary_version, para que edições posteriores nunca alterem silenciosamente o trabalho concluído.
Entrada

Formatos de ficheiro suportados

Transcreva ficheiros de áudio como podcasts, entrevistas e chamadas gravadas, ou vídeos em qualquer formato suportado, ou envie um URL. Se enviar um ficheiro não suportado, a API rejeita-o antes de ser cobrado qualquer minuto.

Vídeo

7 formatos
.mp4
.mov
.mkv
.avi
.webm
.m4v
.3gp

Áudio

4 formatos
.mp3
.wav
.flac
.m4a

Metadados antes de gastar

O ponto final de multimédia devolve a duração, o tamanho do ficheiro, o codec de vídeo, a taxa de fotogramas, a resolução, o codec de áudio, a taxa de amostragem e a disposição dos canais. Valide um ficheiro e estime o custo com antecedência, pois os projetos são cobrados por minuto de áudio ou vídeo.
Segurança e conformidade

Segurança de nível empresarial para dados de áudio e voz

A Brask Inc possui a certificação SOC 2 Tipo II, opera ao abrigo do RGPD e publica o estado de controlo em direto no seu Centro de Confiança, para que as gravações e transcrições sejam geridas ao abrigo de controlos auditados.

Certificações

SOC 2 Type II
GDPR
Membro da CAI e C2PA

Encriptação

TLS 1.2 em trânsito
AES-256 em repouso
Chaves geridas SSE-S3
Rotação de chaves pelo menos a cada 12 meses

O seu conteúdo

Ambiente de IA fechado
Nunca utilizado para treinar modelos gerais
Exportação completa, sem dependência de fornecedor

Acesso

SSO e SAML
Controlo de acesso baseado em funções
Credenciais de cliente OAuth 2.0

Empresa

Opções de residência de dados
SLA personalizados
Gestor de conta dedicado

Direitos de voz

Vozes sintéticas com direitos de utilização
Clonagem de voz baseada no consentimento
Controlos de segurança de IA, humano no circuito
Comparação

API Rask vs. uma API de conversão de voz em texto mais o seu próprio fluxo de trabalho

Uma API de conversão de voz em texto transforma áudio em texto. Quando esse texto tem de se tornar legendas, traduções e versões dobradas, o resto é trabalho de integração. Eis o mesmo resultado, obtido de duas formas.
O que precisa
Rask API
Montado a partir de peças
Uma transcrição com rótulos de orador
Incluído
Incluído na maioria das APIs de conversão de voz em texto
Carimbos de data/hora
Por segmento
Por palavra em muitas APIs de conversão de voz em texto
Tradução da transcrição
Mesmo projeto, mais de 135 opções de idiomas e regiões
Uma API de tradução separada
Legendas em .srt e .vtt
Incluída, no idioma de destino
Criado a partir dos seus próprios dados de temporização
Áudio e vídeo dobrados
Incluído
Um fornecedor de TTS mais a sua própria mistura
Corrigir um segmento
Um pedido de atualização e, em seguida, regenerar
Editar e voltar a sincronizar as suas próprias cópias
Limites de taxa
Nenhum
O que o seu fornecedor determinar
Transcrição em tempo real de áudio em direto
Utilize uma API de conversão de voz em texto em streaming
Feito para isso
Apenas uma transcrição, ao preço mais baixo
Uma API dedicada de conversão de voz em texto custa menos
Preço por hora de áudio
Perguntas frequentes

API de conversão de voz em texto: perguntas frequentes

Não consegue encontrar o que procura? Contacte o departamento de vendas.

O Rask tem uma API de conversão de voz em texto?

Que línguas consegue transcrever?

Posso transcrever ficheiros de áudio sem vídeo?

Suporta a identificação de locutores (diarização)?

A API devolve carateres temporais ao nível da palavra?

Suporta transcrição em tempo real?

Qual é a precisão da transcrição?

Posso adicionar vocabulário personalizado ou termos específicos da área?

Posso obter a transcrição como um ficheiro SRT?

Posso utilizar a minha própria transcrição?

Como é cobrada a transcrição?

Existe um plano gratuito?

Como obtenho acesso à API e uma chave de API?

Comece a dobrar numa tarde

Faça o seu primeiro pedido hoje e fale connosco quando precisar de termos de volume ou de um idioma que mais ninguém tem.