feat: implementa funcionalidade de exportação de faixas de áudio e legenda
This commit is contained in:
+20
-5
@@ -1,7 +1,7 @@
|
||||
# Progresso de Implementação
|
||||
|
||||
**Data:** 28/02/2026
|
||||
**Status:** Fases 1–6 concluídas — compilando, testes passando, aplicação executável
|
||||
**Status:** Fases 1–6 concluídas + exportação de faixa implementada — compilando, testes passando, aplicação executável
|
||||
**Referência:** DEVELOPMENT_PLAN.md v1.0
|
||||
|
||||
---
|
||||
@@ -9,7 +9,10 @@
|
||||
## Resumo Executivo
|
||||
|
||||
Todas as 6 fases do plano de desenvolvimento foram implementadas. O projeto compila sem erros,
|
||||
26 testes unitários passam e a aplicação pode ser executada com `cargo run`.
|
||||
31 testes unitários passam e a aplicação pode ser executada com `cargo run`.
|
||||
|
||||
Após a conclusão das fases, foi implementada a funcionalidade de exportação de faixa de áudio
|
||||
ou legenda diretamente da lista de faixas existentes.
|
||||
|
||||
---
|
||||
|
||||
@@ -61,6 +64,7 @@ src/
|
||||
│ ├── add_subtitle.rs — adiciona SubtitleTrack ao Project
|
||||
│ ├── adjust_sync.rs — altera SyncOffset de faixa externa
|
||||
│ ├── edit_existing_track_sync.rs — altera SyncOffset de faixa existente
|
||||
│ ├── export_track.rs — exporta faixa de áudio ou legenda para arquivo
|
||||
│ ├── set_track_language.rs — altera idioma de faixa externa
|
||||
│ └── generate_output.rs — constrói comando e delega ao MediaProcessorPort
|
||||
│
|
||||
@@ -68,12 +72,12 @@ src/
|
||||
│ ├── mod.rs
|
||||
│ ├── ffmpeg/
|
||||
│ │ ├── mod.rs
|
||||
│ │ ├── command_builder.rs — FfmpegCommandBuilder: Project → Vec<String>
|
||||
│ │ ├── command_builder.rs — FfmpegCommandBuilder: Project → Vec<String>; build_export()
|
||||
│ │ ├── ffprobe_gateway.rs — FfprobeGateway impl MediaInfoPort
|
||||
│ │ └── ffmpeg_gateway.rs — FfmpegGateway impl MediaProcessorPort
|
||||
│ └── filesystem/
|
||||
│ ├── mod.rs — RealFileSystem impl FileSystemPort
|
||||
│ └── file_picker.rs — FilePickerAdapter (diálogos nativos via rfd)
|
||||
│ └── file_picker.rs — FilePickerAdapter; save_audio(codec), save_subtitle(codec)
|
||||
│
|
||||
├── infrastructure/
|
||||
│ ├── mod.rs
|
||||
@@ -97,7 +101,7 @@ src/
|
||||
|
||||
---
|
||||
|
||||
## Testes Unitários (26/26 passando)
|
||||
## Testes Unitários (31/31 passando)
|
||||
|
||||
### Domain — Value Objects
|
||||
| Teste | Resultado |
|
||||
@@ -141,6 +145,15 @@ src/
|
||||
| `mapa_faixa_externa_de_audio` — `map 1:a` | ✅ |
|
||||
| `metadata_idioma_audio` — `-metadata:s:a:0 language=por` | ✅ |
|
||||
|
||||
### Application — ExportTrack
|
||||
| Teste | Resultado |
|
||||
|-------|-----------|
|
||||
| `export_track::exporta_audio_com_c_a_copy` — `-c:a copy` presente, sem `-c copy` genérico | ✅ |
|
||||
| `export_track::exporta_audio_mapeia_stream_correto` — `0:stream_index` correto | ✅ |
|
||||
| `export_track::exporta_legenda_sem_c_copy` — nenhuma forma de `-c` para legendas | ✅ |
|
||||
| `export_track::exporta_legenda_output_e_ultimo_argumento` | ✅ |
|
||||
| `export_track::rejeita_faixa_de_video` — retorna erro para `TrackKind::Video` | ✅ |
|
||||
|
||||
---
|
||||
|
||||
## Dependências (Cargo.toml)
|
||||
@@ -163,12 +176,14 @@ rfd = "0.14"
|
||||
- **`TrackId` é opaco** — não expõe índice interno; mapeamento para `-map N:tipo` feito apenas no adapter
|
||||
- **`Project` rejeita `output == source`** — validado no construtor
|
||||
- **Termos FFmpeg nunca aparecem na UI** — a interface usa linguagem do usuário final
|
||||
- **Exceção documentada ao RNF-01** — `build_export()` omite `-c copy` exclusivamente para legendas (conversão de container de texto, sem processamento de mídia); comentário inline explica a exceção
|
||||
|
||||
---
|
||||
|
||||
## O Que Falta (Backlog de Refinamento)
|
||||
|
||||
### Funcional
|
||||
- [x] Exportar faixa de áudio ou legenda existente para arquivo separado
|
||||
- [ ] Exibição de faixas externas adicionadas com opção de remover
|
||||
- [ ] Progresso em tempo real via `run_ffmpeg_async` (infrastructure já implementada, UI usa thread bloqueante por ora)
|
||||
- [ ] Exibição do comando gerado em modo debug
|
||||
|
||||
Reference in New Issue
Block a user