Ferramenta de terminal escrita em Rust para extrair legendas de arquivos de vídeo e salvá-las em formato .srt.
O RST usa ffprobe para detectar as faixas de legenda e ffmpeg para exportar a faixa selecionada.
- Detecta as faixas de legenda disponíveis em um arquivo de vídeo
- Permite selecionar a faixa a extrair
- Salva a legenda selecionada em formato
.srt - Oferece uma interface interativa de terminal com Ratatui
- Disponibiliza a interface em português, inglês e espanhol
- Detecta o idioma do sistema na primeira execução e permite alterá-lo em Opções
- Usa inglês quando o idioma do sistema não é português, inglês ou espanhol
- Traduz arquivos
.srtpelo serviço de tradução do Google, dividindo legendas grandes em várias requisições assíncronas - Extrai e traduz uma faixa de legenda do vídeo em um único fluxo
O idioma escolhido em Opções é salvo nas configurações do usuário e tem prioridade sobre o idioma do sistema nas próximas execuções.
É necessário ter o FFmpeg instalado e os comandos ffmpeg e ffprobe disponíveis no PATH:
- Linux: normalmente via gerenciador de pacotes (
sudo apt install ffmpeg,sudo dnf install ffmpeg, etc.) - macOS:
brew install ffmpeg - Windows: instalar FFmpeg e garantir que
ffmpegeffprobefiquem no PATH
Também é necessário ter o Rust e o Cargo instalados para compilar o projeto.
Execute a suíte automatizada com:
cargo testOs testes cobrem o parsing das faixas de legenda, os argumentos usados na extração, o fluxo de entrada com e sem argumento, as ações do menu, a geração do nome .srt, a seleção e persistência do idioma, a renderização das telas Ratatui e o fluxo combinado de extração e tradução com dependências simuladas.
Para verificar formatação, compilação e lint:
cargo fmt --check
cargo check
cargo clippy -- -D warningsAs configurações são gravadas dentro do diretório de configuração do usuário:
- Linux:
~/.config/rst/(ou$XDG_CONFIG_HOME/rst/, se definido) - macOS:
~/Library/Application Support/rst/ - Windows:
%APPDATA%\rst\
O idioma fica no arquivo language; a chave digitada em Opções fica em google_translate_api_key; e o toggle Usar chave de API fica em use_api_key. A chave é armazenada em texto simples, mas sua tela de entrada sempre mostra ***; no Unix, o arquivo tem permissão 0600.
cargo build --releaseO executável será criado em target/release/rst.
Inicie sem argumentos para abrir o menu:
cargo runUse as setas para navegar e Enter para selecionar. Escolha Extrair legenda para informar o caminho do vídeo, selecionar uma faixa e definir o nome do arquivo .srt de saída.
Escolha Extrair e traduzir para extrair uma faixa do vídeo e traduzi-la em seguida. O idioma original é obtido dos metadados da faixa selecionada, então o programa pergunta apenas o idioma de destino. O SRT extraído é mantido junto com um segundo arquivo traduzido; é possível cancelar a tradução após a extração e manter o primeiro arquivo. Se os metadados não informarem o idioma, a detecção automática é usada.
Também é possível informar o arquivo de vídeo como argumento.
cargo run -- "video.mkv"O comando FFmpeg usado para extrair a faixa selecionada segue este formato:
ffmpeg -i arquivo.mkv -map 0:INDICE_DA_FAIXA arquivo_saida.srtSe o nome de saída não for informado, o programa usa o nome do arquivo de vídeo com a extensão .srt.
Escolha Traduzir legenda no menu. O programa pergunta, em ordem:
- o caminho do arquivo
.srt; - o idioma original da legenda (padrão
auto, detecção automática); - o idioma de destino, em uma lista pesquisável com os 249 idiomas do catálogo Google (nomes no idioma selecionado no programa; filtre por nome ou código; padrão: o idioma configurado no programa);
- o nome do arquivo traduzido (padrão:
nome_original-idioma.srt, por exemploAloneS13E13-pt.srt).
Os tempos e as tags de posição (como {\an8}) são preservados. As legendas são enviadas em lotes de até 100 textos ou 4000 caracteres, com até 4 requisições simultâneas e novas tentativas em caso de falha.
O programa usa dois serviços de tradução. Em Opções, Usar chave de API controla qual será usado. Quando ativado, a chave salva nas opções tem prioridade sobre GOOGLE_TRANSLATE_API_KEY; se não houver chave, o programa usa o serviço sem chave. Quando desativado, o programa sempre usa o serviço sem chave.
| Situação | Serviço | Qualidade |
|---|---|---|
| Toggle ligado e chave salva/env definida | translateHtml, com chave |
maior |
| Toggle desligado ou nenhuma chave | translate_a/single (gtx), sem chave |
menor |
Sem a chave a tradução funciona, e o programa avisa que está usando o serviço sem chave. Nos testes com o arquivo de exemplo, o resultado do serviço sem chave teve a mesma estrutura (legendas, tempos e tags), mas só cerca de 27% das legendas ficaram com o mesmo texto do serviço com chave; em vários casos a versão com chave soou mais natural.
Ela pode ser digitada em Opções ou fornecida pela variável de ambiente GOOGLE_TRANSLATE_API_KEY (inclusive por um arquivo .env na pasta onde o programa é executado). A chave salva nas opções tem prioridade sobre a variável de ambiente; desligar o toggle força o serviço sem chave.
-
Copie o arquivo de exemplo e preencha a chave:
cp .env.example .env
GOOGLE_TRANSLATE_API_KEY=sua_chave_aqui
-
O
.envestá no.gitignoree não deve ser commitado. O.env.exampleé versionado apenas como modelo, sem a chave real.
Para obter uma chave:
- Acesse o Google Cloud Console e crie ou selecione um projeto.
- Em APIs e serviços, ative a Cloud Translation API.
- Em APIs e serviços > Credenciais, escolha Criar credenciais > Chave de API.
- Restrinja a chave à Cloud Translation API e copie o valor para o
.env.
Os testes com o serviço real são ignorados por padrão. O primeiro usa a chave do .env; o segundo não precisa de chave:
cargo test translates_the_sample_file_with_the_real_service -- --ignored
cargo test translates_the_sample_file_without_an_api_key -- --ignored- criação de legendas com whisper
- modo terminal com args completo
- remoção do uso do ffprobe para alg próprio
- remoção do uso do ffmpeg para alg próprio
- interface grafica
- repo ubuntu e deb
- compilar executavel para diversas arquiteturas