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 +21 -0
- isolar-0.0.1/PKG-INFO +314 -0
- isolar-0.0.1/README.md +282 -0
- isolar-0.0.1/isolar/__init__.py +7 -0
- isolar-0.0.1/isolar/__main__.py +8 -0
- isolar-0.0.1/isolar/cli.py +423 -0
- isolar-0.0.1/isolar/core.py +325 -0
- isolar-0.0.1/isolar/utils.py +493 -0
- isolar-0.0.1/isolar.egg-info/PKG-INFO +314 -0
- isolar-0.0.1/isolar.egg-info/SOURCES.txt +14 -0
- isolar-0.0.1/isolar.egg-info/dependency_links.txt +1 -0
- isolar-0.0.1/isolar.egg-info/entry_points.txt +2 -0
- isolar-0.0.1/isolar.egg-info/requires.txt +1 -0
- isolar-0.0.1/isolar.egg-info/top_level.txt +1 -0
- isolar-0.0.1/pyproject.toml +54 -0
- isolar-0.0.1/setup.cfg +4 -0
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
|
+
[](https://pypi.org/project/isolar/)
|
|
38
|
+
[](https://pypi.org/project/isolar/)
|
|
39
|
+
[](LICENSE)
|
|
40
|
+
[](https://www.python.org/)
|
|
41
|
+
[](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
|
+
[](https://pypi.org/project/isolar/)
|
|
6
|
+
[](https://pypi.org/project/isolar/)
|
|
7
|
+
[](LICENSE)
|
|
8
|
+
[](https://www.python.org/)
|
|
9
|
+
[](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>
|