Skip to content
warubertPublic

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

48 Commits

Folders and files

Repository files navigation

RST (Rust Subtitle Tools)

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.

Funcionalidades

  • 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 .srt pelo 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.

Requisitos

É 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 ffmpeg e ffprobe fiquem no PATH

Também é necessário ter o Rust e o Cargo instalados para compilar o projeto.

Testes

Execute a suíte automatizada com:

cargo test

Os 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 warnings

Configurações do usuário

As 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.

Compilar

cargo build --release

O executável será criado em target/release/rst.

Uso

Inicie sem argumentos para abrir o menu:

cargo run

Use 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"

Extração

O comando FFmpeg usado para extrair a faixa selecionada segue este formato:

ffmpeg -i arquivo.mkv -map 0:INDICE_DA_FAIXA arquivo_saida.srt

Se o nome de saída não for informado, o programa usa o nome do arquivo de vídeo com a extensão .srt.

Tradução

Escolha Traduzir legenda no menu. O programa pergunta, em ordem:

  1. o caminho do arquivo .srt;
  2. o idioma original da legenda (padrão auto, detecção automática);
  3. 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);
  4. o nome do arquivo traduzido (padrão: nome_original-idioma.srt, por exemplo AloneS13E13-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.

Chave de API (opcional)

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.

  1. Copie o arquivo de exemplo e preencha a chave:

    cp .env.example .env
    GOOGLE_TRANSLATE_API_KEY=sua_chave_aqui
  2. O .env está no .gitignore e não deve ser commitado. O .env.example é versionado apenas como modelo, sem a chave real.

Para obter uma chave:

  1. Acesse o Google Cloud Console e crie ou selecione um projeto.
  2. Em APIs e serviços, ative a Cloud Translation API.
  3. Em APIs e serviços > Credenciais, escolha Criar credenciais > Chave de API.
  4. 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

Em desenvolvimento

  • 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

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages