isolar 0.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
isolar-0.0.1/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 HonoravelMacho
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
isolar-0.0.1/PKG-INFO ADDED
@@ -0,0 +1,314 @@
1
+ Metadata-Version: 2.4
2
+ Name: isolar
3
+ Version: 0.0.1
4
+ Summary: Isole áudio e vídeo na velocidade da luz: extração de áudio, remoção de faixa de som e cortes ultrarrápidos (stream copy) via FFmpeg.
5
+ Author: HonoravelMacho
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/HonoravelMacho/isolar
8
+ Project-URL: Repository, https://github.com/HonoravelMacho/isolar
9
+ Project-URL: Issues, https://github.com/HonoravelMacho/isolar/issues
10
+ Keywords: ffmpeg,audio,video,cli,media,cut,trim,extract,isolar,fast-cut,stream-copy
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Environment :: Console
13
+ Classifier: Intended Audience :: End Users/Desktop
14
+ Classifier: Natural Language :: Portuguese (Brazilian)
15
+ Classifier: Operating System :: OS Independent
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3 :: Only
18
+ Classifier: Programming Language :: Python :: 3.8
19
+ Classifier: Programming Language :: Python :: 3.9
20
+ Classifier: Programming Language :: Python :: 3.10
21
+ Classifier: Programming Language :: Python :: 3.11
22
+ Classifier: Programming Language :: Python :: 3.12
23
+ Classifier: Programming Language :: Python :: 3.13
24
+ Classifier: Topic :: Multimedia :: Sound/Audio
25
+ Classifier: Topic :: Multimedia :: Video
26
+ Classifier: Topic :: Utilities
27
+ Requires-Python: >=3.8
28
+ Description-Content-Type: text/markdown
29
+ License-File: LICENSE
30
+ Requires-Dist: tqdm>=4.60
31
+ Dynamic: license-file
32
+
33
+ <div align="center">
34
+
35
+ # 🎧 ISOLAR
36
+
37
+ [![PyPI](https://img.shields.io/pypi/v/isolar?color=orange&label=PyPI)](https://pypi.org/project/isolar/)
38
+ [![Status](https://img.shields.io/badge/status-est%C3%A1vel-brightgreen)](https://pypi.org/project/isolar/)
39
+ [![Licença](https://img.shields.io/badge/licen%C3%A7a-MIT-green)](LICENSE)
40
+ [![Python](https://img.shields.io/badge/python-3.8%2B-blue)](https://www.python.org/)
41
+ [![FFmpeg](https://img.shields.io/badge/FFmpeg-requerido-informational)](https://ffmpeg.org/)
42
+
43
+ **Isole áudio e vídeo na velocidade da luz — sem recodificar, sem fricção, sem enrolação.**
44
+
45
+ `isolar` é uma CLI interativa que usa o FFmpeg por baixo dos panos para extrair áudio,
46
+ remover faixas de som e cortar mídias em milissegundos.
47
+
48
+ [Instalação](#-instalação) · [Uso](#-uso) · [Flags](#-flags-disponíveis) · [Como funciona](#-como-funciona-por-dentro) · [FAQ](#-faq)
49
+
50
+ </div>
51
+
52
+ ---
53
+
54
+ ## ✨ Destaques
55
+
56
+ - 🎵 **Isolar áudio** — extrai a faixa de áudio de qualquer vídeo (MP3, M4A, AAC, WAV, FLAC, OGG, OPUS, WMA, AIFF...).
57
+ - 🎬 **Isolar vídeo** — remove o som do vídeo, gerando um arquivo mudo.
58
+ - ✂️ **Fast Cut** — corta/apara mídia com **cópia direta de stream** (`-c copy`): **_ultrarrápido_** e **sem perda de qualidade**.
59
+ - 🖥️ **Dois modos de uso** — menu interativo numérico no terminal **ou** flags diretas para automação/scripting.
60
+ - 📁 **Zero mochilão** — os arquivos gerados são salvos na pasta de trabalho atual (`cwd`) do terminal, automaticamente.
61
+ - 🧠 **Proteção de arquivos** — nunca sobrescreve nada: se o nome existir, salva com sufixo ` (1)`, ` (2)`...
62
+ - 📊 **Barra de progresso** limpa no terminal enquanto o FFmpeg trabalha.
63
+ - 🩺 **Verificação inteligente** — detecta se o FFmpeg está instalado e ensina como instalar se não estiver.
64
+
65
+ ---
66
+
67
+ ## 🚀 Instalação
68
+
69
+ ### 1. Instale o FFmpeg (dependência do sistema)
70
+
71
+ O `isolar` é um drinque sobre o FFmpeg — você precisa dele no sistema:
72
+
73
+ | SO | Comando |
74
+ |---|---|
75
+ | **Windows** | `winget install Gyan.FFmpeg` *ou* `choco install ffmpeg` |
76
+ | **macOS** | `brew install ffmpeg` |
77
+ | **Debian / Ubuntu** | `sudo apt install ffmpeg` |
78
+ | **Fedora** | `sudo dnf install ffmpeg` |
79
+ | **Arch** | `sudo pacman -S ffmpeg` |
80
+
81
+ Confira com: `ffmpeg -version`
82
+
83
+ ### 2. Instale o isolar via pip
84
+
85
+ ```bash
86
+ pip install isolar
87
+ ```
88
+
89
+ Pronto! ✅ Agora basta chamar `isolar` no terminal.
90
+
91
+ > 💡 O `isolar` também detecta FFmpeg que você já tenha, então não faz ruído se tudo estiver no PATH.
92
+
93
+ ---
94
+
95
+ ## 📺 Uso — Menu interativo
96
+
97
+ Basta rodar:
98
+
99
+ ```bash
100
+ isolar
101
+ ```
102
+
103
+ ```
104
+ ╔════════════════════════════════════════════════╗
105
+ ║ 🎧 ISOLAR v0.0.1 ║
106
+ ║ isole áudio e vídeo na velocidade da luz ✨ ║
107
+ ╚════════════════════════════════════════════════╝
108
+
109
+ O que você quer isolar hoje?
110
+ 1) 🎵 Isolar áudio extrai o áudio de um vídeo
111
+ 2) 🎬 Isolar vídeo gera um vídeo sem som
112
+ 3) ✂ Cortar/aparar corte ultrarrápido (stream copy)
113
+ 4) ℹ Info da mídia duração, codecs, tamanho...
114
+ 0) ✖ Sair
115
+
116
+ Escolha uma opção [0-4]:
117
+ ```
118
+
119
+ Exemplo de sessão:
120
+
121
+ ```
122
+ Escolha uma opção [0-4]: 1
123
+ 📁 Caminho do arquivo [ ]: ~/Videos/seriado.mp4
124
+ Formato [1]: 1
125
+ ✔ Pronto! Arquivo salvo em: /caminho/atual/seriado_audio.mp3
126
+ ```
127
+
128
+ ## ⌨️ Uso — Linha de comando (flags)
129
+
130
+ ### 🎵 Isolar áudio (`isolar audio`)
131
+
132
+ ```bash
133
+ isolar audio video.mp4 # → video_audio.mp3 (padrão)
134
+ isolar audio video.mp4 -f flac # → sem perdas
135
+ isolar audio video.mp4 -f m4a -b 320k # → M4A 320 kbps
136
+ isolar audio video.mp4 -f copy # → copia o áudio sem recodificar nada
137
+ isolar audio video.mp4 -t 1 # → usa a 2ª faixa de áudio
138
+ ```
139
+
140
+ ### 🎬 Isolar vídeo (`isolar video`)
141
+
142
+ ```bash
143
+ isolar video clip.mkv # → clip_mudo.mkv, sem faixa de som
144
+ ```
145
+
146
+ ### ✂️ Cortar / aparar (`isolar cut`)
147
+
148
+ ```bash
149
+ isolar cut video.mp4 -s 10 -d 45 # 45s a partir do segundo 10
150
+ isolar cut video.mp4 -s 00:01:30 -e 00:03:00 # entre 1:30 e 3:00
151
+ isolar cut video.mp4 -s 1m30s -d 2m # tempos também em formato legível
152
+ isolar cut video.mp4 -s 10 -e 20 --reencode # corte exato ao frame
153
+ ```
154
+
155
+ ### ℹ️ Info da mídia (`isolar info`)
156
+
157
+ ```bash
158
+ isolar info video.mp4
159
+ ```
160
+
161
+ ```
162
+ Arquivo: video.mp4
163
+ Container: mov,mp4,m4a,3g2,mj2
164
+ Duração: 00:12:34
165
+ Tamanho: 1.2 GB
166
+ Vídeo: h264 · 1920x1080
167
+ Áudio: aac · 44100 Hz · 2 canal(is)
168
+ ```
169
+
170
+ ---
171
+
172
+ ## 🏳️ Flags disponíveis
173
+
174
+ | Comando / Flag | O que faz | Exemplo |
175
+ |---|---|---|
176
+ | `isolar` | Abre o **menu interativo** | `isolar` |
177
+ | `isolar audio <arquivo>` | Extrai o áudio | `isolar audio video.mp4` |
178
+ | ├── `-f, --format` | Formato de saída: `mp3` `m4a` `aac` `wav` `flac` `ogg` `opus` `wma` `aiff` `copy` | `isolar audio v.mp4 -f flac` |
179
+ | ├── `-b, --bitrate` | Bitrate nos formatos com perdas (padrão `192k`) | `isolar audio v.mp4 -b 320k` |
180
+ | ├── `-t, --track` | Índice da faixa de áudio (começa em 0) | `isolar audio v.mp4 -t 1` |
181
+ | ├── `-o, --output` | Arquivo/pasta de saída (padrão: `cwd`) | `isolar audio v.mp4 -o ~/Musica` |
182
+ | `isolar video <arquivo>` | Gera vídeo mudo (sem faixa de áudio) | `isolar video clip.mkv` |
183
+ | `isolar cut <arquivo>` | Corte/aparar via **stream copy** | `isolar cut v.mp4 -s 5 -d 10` |
184
+ | ├── `-s, --start` | Ponto de início | `-s 90` · `-s 1:30` · `-s 00:01:30.500` · `-s 1m30s` |
185
+ | ├── `-e, --end` | Ponto de fim | `-e 00:03:00` |
186
+ | ├── `-d, --duration` | Duração do recorte | `-d 45` · `-d 2m` |
187
+ | ├── `--reencode` | Corte exato ao frame (recodifica, mais lento) | `isolar cut v.mp4 -s 10 -e 20 --reencode` |
188
+ | ├── `-o, --output` | Arquivo/pasta de saída | `isolar cut v.mp4 -s 5 -e 9 -o corte.mp4` |
189
+ | `isolar info <arquivo>` | Mostra codecs, duração e tamanho | `isolar info v.mp4` |
190
+ | `-V, --version` | Mostra a versão e sai | `isolar --version` |
191
+ | `-h, --help` | Mostra a ajuda completa | `isolar --help` |
192
+
193
+ > 💡 Sem posição obrigatória! `isolar audio` (sem arquivo) pede o caminho interativamente.
194
+
195
+ ---
196
+
197
+ ## 📊 Formatos suportados na extração (`isolar audio`)
198
+
199
+ Tudo que o FFmpeg sabe embalar:
200
+
201
+ | Formato | Codec | Perdas? | Controle de bitrate |
202
+ |---|---|---|---|
203
+ | `mp3` | libmp3lame | ✅ | ✅ |
204
+ | `m4a` | AAC | ✅ | ✅ |
205
+ | `aac` | AAC (stream cru) | ✅ | ✅ |
206
+ | `wav` | PCM s16le | ❌ | — |
207
+ | `flac` | FLAC | ❌ | — |
208
+ | `ogg` | Vorbis | ✅ | ✅ |
209
+ | `opus` | libopus | ✅ | ✅ |
210
+ | `wma` | Windows Media | ✅ | ✅ |
211
+ | `aiff` | PCM s16be | ❌ | — |
212
+ | `copy` | o mesmo do arquivo | ❌ (identidade byte a byte) | não precisa |
213
+
214
+ > 💡 **modo copy**: faz a cópia sem recodificação, no container adequado ao codec já presente
215
+ > (AAC → `.m4a`, MP3 → `.mp3`, Opus → `.opus`, FLAC → `.flac`...). É o modo mais honesto possível.
216
+
217
+ ---
218
+
219
+ ## 🧠 Como funciona (por dentro)
220
+
221
+ ### Corte *fast cut* com stream copy
222
+
223
+ O `isolar cut` monta no FFmpeg:
224
+
225
+ ```
226
+ ffmpeg -ss INÍCIO -i entrada -t DURAÇÃO -c copy saída
227
+ ```
228
+
229
+ O `-ss` **antes** do `-i` busca no próprio demuxer (sem decodificar) e o `-c copy`
230
+ replica os pacotes comprimidos **sem recodificar nenhum frame**. Resultado: corte em
231
+ milissegundos, mesmo em arquivos de GBs, com a qualidade intacta.
232
+
233
+ O `isolar` ainda lê o progresso em tempo real com `-progress pipe:1` e ffprobe
234
+ (de duração) para desenhar a barra de progresso com o `tqdm`.
235
+
236
+ ### Arquivos de saída
237
+
238
+ Todos os produto do `isolar` são salvos na **pasta de trabalho atual**:
239
+
240
+ | Operação | Nome automático |
241
+ |---|---|
242
+ | Extração de áudio | `<nome>_audio.<formato>` |
243
+ | Vídeo sem som | `<nome>_mudo.<container>` |
244
+ | Corte/aparado | `<nome>_corte.<container>` |
245
+
246
+ Se o arquivo de destino já existir, o `isolar` **não sobrescreve**: salva como
247
+ `<nome> (1).<ext>`, ` (2)`, ...
248
+
249
+ ---
250
+
251
+ ## ❓ FAQ
252
+
253
+ **— O corte não começou exatamente no segundo que eu pedi. Por quê?**
254
+ No modo *fast cut*, vídeos comprimidos (H.264 etc.) só podem ser cortados em
255
+ **keyframes**. O FFmpeg recua até o keyframe anterior ao ponto pedido (é o mesmo
256
+ comportamento de ferramentas pagas). Precisa de precisão de frame? Use o
257
+ `--reencode`.
258
+
259
+ **— Posso escolher onde os arquivos vão?**
260
+ Sim: `-o` aceita **pasta** (`isolar cut v.mp4 ... -o ~/Musicas/`) ou **caminho
261
+ completo** (`-o ~/Musicas/abertura.mp3`). Sem `-o`, tudo cai no `cwd`.
262
+
263
+ **— O FFmpeg não está no PATH.**
264
+ O `isolar` detecta e te ensina: instale conforme [Instalação](#-instalação) e reabra o terminal.
265
+
266
+ **— Conserva metadados?**
267
+ No `audio -f copy` sim, pois é cópia integral da faixa. Nas recodificações, o
268
+ FFmpeg mapeia os metadados padrões do container.
269
+
270
+ ---
271
+
272
+ ## 📦 Nota para o PyPI (long_description)
273
+
274
+ Este `README.md` **é também a descrição longa do pacote** no PyPI (long_description)
275
+ — declarado em `pyproject.toml` via:
276
+
277
+ ```toml
278
+ readme = "README.md" # → long_description
279
+ ```
280
+
281
+ O badge de versão aponta direto para a página do projeto na PyPI.
282
+
283
+ ---
284
+
285
+ ## 🤝 Contribuindo
286
+
287
+ Achei um bug? Abra uma [issue](https://github.com/HonoravelMacho/isolar/issues).
288
+ PRs são bem-vindos! Estrutura do projeto:
289
+
290
+ ```
291
+ isolar/
292
+ ├── isolar/
293
+ │ ├── __init__.py # versão e metadados
294
+ │ ├── __main__.py # python -m isolar
295
+ │ ├── cli.py # argparse + menu interativo
296
+ │ ├── core.py # operações de mídia (FFmpeg)
297
+ │ └── utils.py # ffprobe, progresso, cores, tempos
298
+ ├── deploy.py # pipeline de build + twine + push
299
+ ├── pyproject.toml # empacotamento moderno (setuptools)
300
+ ├── LICENSE # MIT
301
+ └── README.md # você está aqui ✨
302
+ ```
303
+
304
+ ## 📜 Licença
305
+
306
+ Distribuído sob a [Licença MIT](LICENSE) — use, estude, modifique e compartilhe livremente.
307
+
308
+ ---
309
+
310
+ <div align="center">
311
+
312
+ **isolar** © 2026 · [HonoravelMacho](https://github.com/HonoravelMacho) · feito com 🎧 e FFmpeg
313
+
314
+ </div>
isolar-0.0.1/README.md ADDED
@@ -0,0 +1,282 @@
1
+ <div align="center">
2
+
3
+ # 🎧 ISOLAR
4
+
5
+ [![PyPI](https://img.shields.io/pypi/v/isolar?color=orange&label=PyPI)](https://pypi.org/project/isolar/)
6
+ [![Status](https://img.shields.io/badge/status-est%C3%A1vel-brightgreen)](https://pypi.org/project/isolar/)
7
+ [![Licença](https://img.shields.io/badge/licen%C3%A7a-MIT-green)](LICENSE)
8
+ [![Python](https://img.shields.io/badge/python-3.8%2B-blue)](https://www.python.org/)
9
+ [![FFmpeg](https://img.shields.io/badge/FFmpeg-requerido-informational)](https://ffmpeg.org/)
10
+
11
+ **Isole áudio e vídeo na velocidade da luz — sem recodificar, sem fricção, sem enrolação.**
12
+
13
+ `isolar` é uma CLI interativa que usa o FFmpeg por baixo dos panos para extrair áudio,
14
+ remover faixas de som e cortar mídias em milissegundos.
15
+
16
+ [Instalação](#-instalação) · [Uso](#-uso) · [Flags](#-flags-disponíveis) · [Como funciona](#-como-funciona-por-dentro) · [FAQ](#-faq)
17
+
18
+ </div>
19
+
20
+ ---
21
+
22
+ ## ✨ Destaques
23
+
24
+ - 🎵 **Isolar áudio** — extrai a faixa de áudio de qualquer vídeo (MP3, M4A, AAC, WAV, FLAC, OGG, OPUS, WMA, AIFF...).
25
+ - 🎬 **Isolar vídeo** — remove o som do vídeo, gerando um arquivo mudo.
26
+ - ✂️ **Fast Cut** — corta/apara mídia com **cópia direta de stream** (`-c copy`): **_ultrarrápido_** e **sem perda de qualidade**.
27
+ - 🖥️ **Dois modos de uso** — menu interativo numérico no terminal **ou** flags diretas para automação/scripting.
28
+ - 📁 **Zero mochilão** — os arquivos gerados são salvos na pasta de trabalho atual (`cwd`) do terminal, automaticamente.
29
+ - 🧠 **Proteção de arquivos** — nunca sobrescreve nada: se o nome existir, salva com sufixo ` (1)`, ` (2)`...
30
+ - 📊 **Barra de progresso** limpa no terminal enquanto o FFmpeg trabalha.
31
+ - 🩺 **Verificação inteligente** — detecta se o FFmpeg está instalado e ensina como instalar se não estiver.
32
+
33
+ ---
34
+
35
+ ## 🚀 Instalação
36
+
37
+ ### 1. Instale o FFmpeg (dependência do sistema)
38
+
39
+ O `isolar` é um drinque sobre o FFmpeg — você precisa dele no sistema:
40
+
41
+ | SO | Comando |
42
+ |---|---|
43
+ | **Windows** | `winget install Gyan.FFmpeg` *ou* `choco install ffmpeg` |
44
+ | **macOS** | `brew install ffmpeg` |
45
+ | **Debian / Ubuntu** | `sudo apt install ffmpeg` |
46
+ | **Fedora** | `sudo dnf install ffmpeg` |
47
+ | **Arch** | `sudo pacman -S ffmpeg` |
48
+
49
+ Confira com: `ffmpeg -version`
50
+
51
+ ### 2. Instale o isolar via pip
52
+
53
+ ```bash
54
+ pip install isolar
55
+ ```
56
+
57
+ Pronto! ✅ Agora basta chamar `isolar` no terminal.
58
+
59
+ > 💡 O `isolar` também detecta FFmpeg que você já tenha, então não faz ruído se tudo estiver no PATH.
60
+
61
+ ---
62
+
63
+ ## 📺 Uso — Menu interativo
64
+
65
+ Basta rodar:
66
+
67
+ ```bash
68
+ isolar
69
+ ```
70
+
71
+ ```
72
+ ╔════════════════════════════════════════════════╗
73
+ ║ 🎧 ISOLAR v0.0.1 ║
74
+ ║ isole áudio e vídeo na velocidade da luz ✨ ║
75
+ ╚════════════════════════════════════════════════╝
76
+
77
+ O que você quer isolar hoje?
78
+ 1) 🎵 Isolar áudio extrai o áudio de um vídeo
79
+ 2) 🎬 Isolar vídeo gera um vídeo sem som
80
+ 3) ✂ Cortar/aparar corte ultrarrápido (stream copy)
81
+ 4) ℹ Info da mídia duração, codecs, tamanho...
82
+ 0) ✖ Sair
83
+
84
+ Escolha uma opção [0-4]:
85
+ ```
86
+
87
+ Exemplo de sessão:
88
+
89
+ ```
90
+ Escolha uma opção [0-4]: 1
91
+ 📁 Caminho do arquivo [ ]: ~/Videos/seriado.mp4
92
+ Formato [1]: 1
93
+ ✔ Pronto! Arquivo salvo em: /caminho/atual/seriado_audio.mp3
94
+ ```
95
+
96
+ ## ⌨️ Uso — Linha de comando (flags)
97
+
98
+ ### 🎵 Isolar áudio (`isolar audio`)
99
+
100
+ ```bash
101
+ isolar audio video.mp4 # → video_audio.mp3 (padrão)
102
+ isolar audio video.mp4 -f flac # → sem perdas
103
+ isolar audio video.mp4 -f m4a -b 320k # → M4A 320 kbps
104
+ isolar audio video.mp4 -f copy # → copia o áudio sem recodificar nada
105
+ isolar audio video.mp4 -t 1 # → usa a 2ª faixa de áudio
106
+ ```
107
+
108
+ ### 🎬 Isolar vídeo (`isolar video`)
109
+
110
+ ```bash
111
+ isolar video clip.mkv # → clip_mudo.mkv, sem faixa de som
112
+ ```
113
+
114
+ ### ✂️ Cortar / aparar (`isolar cut`)
115
+
116
+ ```bash
117
+ isolar cut video.mp4 -s 10 -d 45 # 45s a partir do segundo 10
118
+ isolar cut video.mp4 -s 00:01:30 -e 00:03:00 # entre 1:30 e 3:00
119
+ isolar cut video.mp4 -s 1m30s -d 2m # tempos também em formato legível
120
+ isolar cut video.mp4 -s 10 -e 20 --reencode # corte exato ao frame
121
+ ```
122
+
123
+ ### ℹ️ Info da mídia (`isolar info`)
124
+
125
+ ```bash
126
+ isolar info video.mp4
127
+ ```
128
+
129
+ ```
130
+ Arquivo: video.mp4
131
+ Container: mov,mp4,m4a,3g2,mj2
132
+ Duração: 00:12:34
133
+ Tamanho: 1.2 GB
134
+ Vídeo: h264 · 1920x1080
135
+ Áudio: aac · 44100 Hz · 2 canal(is)
136
+ ```
137
+
138
+ ---
139
+
140
+ ## 🏳️ Flags disponíveis
141
+
142
+ | Comando / Flag | O que faz | Exemplo |
143
+ |---|---|---|
144
+ | `isolar` | Abre o **menu interativo** | `isolar` |
145
+ | `isolar audio <arquivo>` | Extrai o áudio | `isolar audio video.mp4` |
146
+ | ├── `-f, --format` | Formato de saída: `mp3` `m4a` `aac` `wav` `flac` `ogg` `opus` `wma` `aiff` `copy` | `isolar audio v.mp4 -f flac` |
147
+ | ├── `-b, --bitrate` | Bitrate nos formatos com perdas (padrão `192k`) | `isolar audio v.mp4 -b 320k` |
148
+ | ├── `-t, --track` | Índice da faixa de áudio (começa em 0) | `isolar audio v.mp4 -t 1` |
149
+ | ├── `-o, --output` | Arquivo/pasta de saída (padrão: `cwd`) | `isolar audio v.mp4 -o ~/Musica` |
150
+ | `isolar video <arquivo>` | Gera vídeo mudo (sem faixa de áudio) | `isolar video clip.mkv` |
151
+ | `isolar cut <arquivo>` | Corte/aparar via **stream copy** | `isolar cut v.mp4 -s 5 -d 10` |
152
+ | ├── `-s, --start` | Ponto de início | `-s 90` · `-s 1:30` · `-s 00:01:30.500` · `-s 1m30s` |
153
+ | ├── `-e, --end` | Ponto de fim | `-e 00:03:00` |
154
+ | ├── `-d, --duration` | Duração do recorte | `-d 45` · `-d 2m` |
155
+ | ├── `--reencode` | Corte exato ao frame (recodifica, mais lento) | `isolar cut v.mp4 -s 10 -e 20 --reencode` |
156
+ | ├── `-o, --output` | Arquivo/pasta de saída | `isolar cut v.mp4 -s 5 -e 9 -o corte.mp4` |
157
+ | `isolar info <arquivo>` | Mostra codecs, duração e tamanho | `isolar info v.mp4` |
158
+ | `-V, --version` | Mostra a versão e sai | `isolar --version` |
159
+ | `-h, --help` | Mostra a ajuda completa | `isolar --help` |
160
+
161
+ > 💡 Sem posição obrigatória! `isolar audio` (sem arquivo) pede o caminho interativamente.
162
+
163
+ ---
164
+
165
+ ## 📊 Formatos suportados na extração (`isolar audio`)
166
+
167
+ Tudo que o FFmpeg sabe embalar:
168
+
169
+ | Formato | Codec | Perdas? | Controle de bitrate |
170
+ |---|---|---|---|
171
+ | `mp3` | libmp3lame | ✅ | ✅ |
172
+ | `m4a` | AAC | ✅ | ✅ |
173
+ | `aac` | AAC (stream cru) | ✅ | ✅ |
174
+ | `wav` | PCM s16le | ❌ | — |
175
+ | `flac` | FLAC | ❌ | — |
176
+ | `ogg` | Vorbis | ✅ | ✅ |
177
+ | `opus` | libopus | ✅ | ✅ |
178
+ | `wma` | Windows Media | ✅ | ✅ |
179
+ | `aiff` | PCM s16be | ❌ | — |
180
+ | `copy` | o mesmo do arquivo | ❌ (identidade byte a byte) | não precisa |
181
+
182
+ > 💡 **modo copy**: faz a cópia sem recodificação, no container adequado ao codec já presente
183
+ > (AAC → `.m4a`, MP3 → `.mp3`, Opus → `.opus`, FLAC → `.flac`...). É o modo mais honesto possível.
184
+
185
+ ---
186
+
187
+ ## 🧠 Como funciona (por dentro)
188
+
189
+ ### Corte *fast cut* com stream copy
190
+
191
+ O `isolar cut` monta no FFmpeg:
192
+
193
+ ```
194
+ ffmpeg -ss INÍCIO -i entrada -t DURAÇÃO -c copy saída
195
+ ```
196
+
197
+ O `-ss` **antes** do `-i` busca no próprio demuxer (sem decodificar) e o `-c copy`
198
+ replica os pacotes comprimidos **sem recodificar nenhum frame**. Resultado: corte em
199
+ milissegundos, mesmo em arquivos de GBs, com a qualidade intacta.
200
+
201
+ O `isolar` ainda lê o progresso em tempo real com `-progress pipe:1` e ffprobe
202
+ (de duração) para desenhar a barra de progresso com o `tqdm`.
203
+
204
+ ### Arquivos de saída
205
+
206
+ Todos os produto do `isolar` são salvos na **pasta de trabalho atual**:
207
+
208
+ | Operação | Nome automático |
209
+ |---|---|
210
+ | Extração de áudio | `<nome>_audio.<formato>` |
211
+ | Vídeo sem som | `<nome>_mudo.<container>` |
212
+ | Corte/aparado | `<nome>_corte.<container>` |
213
+
214
+ Se o arquivo de destino já existir, o `isolar` **não sobrescreve**: salva como
215
+ `<nome> (1).<ext>`, ` (2)`, ...
216
+
217
+ ---
218
+
219
+ ## ❓ FAQ
220
+
221
+ **— O corte não começou exatamente no segundo que eu pedi. Por quê?**
222
+ No modo *fast cut*, vídeos comprimidos (H.264 etc.) só podem ser cortados em
223
+ **keyframes**. O FFmpeg recua até o keyframe anterior ao ponto pedido (é o mesmo
224
+ comportamento de ferramentas pagas). Precisa de precisão de frame? Use o
225
+ `--reencode`.
226
+
227
+ **— Posso escolher onde os arquivos vão?**
228
+ Sim: `-o` aceita **pasta** (`isolar cut v.mp4 ... -o ~/Musicas/`) ou **caminho
229
+ completo** (`-o ~/Musicas/abertura.mp3`). Sem `-o`, tudo cai no `cwd`.
230
+
231
+ **— O FFmpeg não está no PATH.**
232
+ O `isolar` detecta e te ensina: instale conforme [Instalação](#-instalação) e reabra o terminal.
233
+
234
+ **— Conserva metadados?**
235
+ No `audio -f copy` sim, pois é cópia integral da faixa. Nas recodificações, o
236
+ FFmpeg mapeia os metadados padrões do container.
237
+
238
+ ---
239
+
240
+ ## 📦 Nota para o PyPI (long_description)
241
+
242
+ Este `README.md` **é também a descrição longa do pacote** no PyPI (long_description)
243
+ — declarado em `pyproject.toml` via:
244
+
245
+ ```toml
246
+ readme = "README.md" # → long_description
247
+ ```
248
+
249
+ O badge de versão aponta direto para a página do projeto na PyPI.
250
+
251
+ ---
252
+
253
+ ## 🤝 Contribuindo
254
+
255
+ Achei um bug? Abra uma [issue](https://github.com/HonoravelMacho/isolar/issues).
256
+ PRs são bem-vindos! Estrutura do projeto:
257
+
258
+ ```
259
+ isolar/
260
+ ├── isolar/
261
+ │ ├── __init__.py # versão e metadados
262
+ │ ├── __main__.py # python -m isolar
263
+ │ ├── cli.py # argparse + menu interativo
264
+ │ ├── core.py # operações de mídia (FFmpeg)
265
+ │ └── utils.py # ffprobe, progresso, cores, tempos
266
+ ├── deploy.py # pipeline de build + twine + push
267
+ ├── pyproject.toml # empacotamento moderno (setuptools)
268
+ ├── LICENSE # MIT
269
+ └── README.md # você está aqui ✨
270
+ ```
271
+
272
+ ## 📜 Licença
273
+
274
+ Distribuído sob a [Licença MIT](LICENSE) — use, estude, modifique e compartilhe livremente.
275
+
276
+ ---
277
+
278
+ <div align="center">
279
+
280
+ **isolar** © 2026 · [HonoravelMacho](https://github.com/HonoravelMacho) · feito com 🎧 e FFmpeg
281
+
282
+ </div>
@@ -0,0 +1,7 @@
1
+ """isolar — isole áudio e vídeo na velocidade da luz (FFmpeg por baixo dos panos)."""
2
+
3
+ __version__ = "0.0.1"
4
+ __author__ = "HonoravelMacho"
5
+ __license__ = "MIT"
6
+
7
+ __all__ = ["__version__", "__author__", "__license__"]
@@ -0,0 +1,8 @@
1
+ """Permite executar o pacote via `python -m isolar`."""
2
+
3
+ import sys
4
+
5
+ from .cli import main
6
+
7
+ if __name__ == "__main__":
8
+ sys.exit(main())