Automatizar com Macros
Definição curta: Tutorial sobre como usar scripting Python no Tenacity para automatizar tarefas repetitivas — desde macros simples até processamento em lote de múltiplos arquivos.
Antes de começar
- Tenacity instalado — veja Instalação no Linux, Windows ou macOS
- Um arquivo de áudio de teste que você não se importe de estragar
O que você vai aprender
- Explicar Habilitar Python scripting com suas palavras
- Explicar Script simples: normalizar todos os arquivos de uma pasta com suas palavras
- Explicar Script de processamento em lote com suas palavras
- Reconhecer, no seu próprio material, onde o assunto desta página se aplica
O que é
O Tenacity suporta scripting via Python, permitindo automatizar workflows que seriam manuais. Isso é especialmente útil para:
- Processar múltiplos arquivos de uma vez
- Aplicar chain de efeitos idêntico em várias faixas
- Análiselote de áudio (BPM, pitch, loudness)
- Gerar relatórios de projeto
Índice de sub-tópicos
- Habilitar Python scripting
- Script simples: normalizar todos os arquivos de uma pasta
- Script de processamento em lote
- Aplicar chain de efeitos automaticamente
- Gerar relatório de loudness
- Cuidados e limitações
Habilitar Python scripting
Edit > Preferences > Effects- Marcar Enable Python scripting
- Reiniciar Tenacity
Tools > Script Browserpara ver exemplos
Script simples: normalizar todos os arquivos de uma pasta
Script
import tenacity
import os
from glob import glob
# Pasta com arquivos
pasta = "/home/user/gravacoes/"
# Extensões a processar
extensoes = ["*.wav", "*.mp3", "*.flac"]
for ext in extensoes:
for arquivo in glob(os.path.join(pasta, ext)):
print(f"Processando: {arquivo}")
# Abrir arquivo
tenacity.open(arquivo)
# Normalizar
tenacity.apply_effect("Normalize", {
"peak amplitude": -3.0,
"remove DC offset": True
})
# Exportar (sobrescreve original)
tenacity.export(arquivo, format="WAV")
print(f"Concluído: {arquivo}")
print("Todos os arquivos processados!")Como executar
- Salvar script como
normalizar_lote.py Tools > Script Browser > Run Script- Selecionar o arquivo
Script de processamento em lote
Processar episódios de podcast com chain fixo:
import tenacity
def processar_podcast(caminho):
"""Aplica chain completo de pós-produção"""
print(f"Iniciando: {caminho}")
# 1. Abrir
tenacity.open(caminho)
# 2. Noise Reduction
print(" - Removendo ruído...")
tenacity.apply_effect("Noise Reduction", {
"Noise Reduction": 12,
"Sensitivity": 0.0,
"Smoothing": 6
})
# 3. Compressor
print(" - Comprimindo...")
tenacity.apply_effect("Compressor", {
"Threshold": -18,
"Ratio": 4.0,
"Attack": 10,
"Release": 100,
"Makeup Gain": True
})
# 4. Limiter
print(" - Limitando...")
tenacity.apply_effect("Limiter", {
"Ceiling": -0.3
})
# 5. Exportar como MP3 192kbps
output = caminho.replace(".wav", "_final.mp3")
tenacity.export(output, format="MP3", bitrate=192)
print(f"Concluído: {output}")
# Processar todos os WAVs na pasta
import os
pasta = "/home/user/podcast/"
for f in os.listdir(pasta):
if f.endswith(".wav"):
processar_podcast(os.path.join(pasta, f))Aplicar chain de efeitos automaticamente
Para criar um preset reutilizável:
flowchart LR
A[Arquivo.wav] --> B[Noise Gate]
B --> C[Compressor]
C --> D[EQ 3 bandas]
D --> E[Normalize -3dB]
E --> F[Limiter -0.3dB]
F --> G[Podcast_Final.mp3]
Script para salvar este chain:
import tenacity
def aplicar_chain_ podcast():
"""Chain de efeitos para podcast"""
effects = [
("Noise Gate", {"Threshold": -30, "Attack": 10}),
("Compressor", {"Threshold": -18, "Ratio": 3.5}),
("Normalize", {"peak amplitude": -3.0}),
("Limiter", {"Ceiling": -0.3})
]
for name, params in effects:
tenacity.apply_effect(name, params)
# Executar no arquivo aberto
# Tenacity.open("/path/to/file.wav")
# aplicar_chain_podcast()Gerar relatório de loudness
import tenacity
def analisar_loudness(caminho):
"""Gera relatório de loudness do arquivo"""
tenacity.open(caminho)
# Analyze > Loudness
resultado = tenacity.analyze("Loudness")
print(f"Arquivo: {caminho}")
print(f" Integrated: {resultado['integrated']:.1f} LUFS")
print(f" Short-term: {resultado['shortterm_max']:.1f} LUFS")
print(f" Peak: {resultado['peak']:.1f} dBTP")
return resultado
# Analisar pasta
import os
pasta = "/home/user/podcast/"
for f in sorted(os.listdir(pasta)):
if f.endswith(".wav") or f.endswith(".mp3"):
try:
analisar_loudness(os.path.join(pasta, f))
except Exception as e:
print(f"Erro em {f}: {e}")Cuidados e limitações
| Risco | Mitigação |
|---|---|
| Script com erro pode crashar Tenacity | Testar em cópia primeiro |
| Arquivos podem ser sobrescritos | Usar backup ou output diferente |
| Nem todos efeitos têm API Python | Verificar documentação |
| Scripts em batch demoram | Rodar overnight comprogresso |
Você aprendeu
- Habilitar Python scripting
- Script simples: normalizar todos os arquivos de uma pasta
- Script de processamento em lote
- Aplicar chain de efeitos automaticamente
- Gerar relatório de loudness
Perguntas para reflexão
- O que Habilitar Python scripting resolve, e o que se perde sem isso?
- O que Script simples: normalizar todos os arquivos de uma pasta resolve, e o que se perde sem isso?
- O que Script de processamento em lote resolve, e o que se perde sem isso?
- Que parte desta página você conseguiria executar sem consultar o texto?
Artigos relacionados
Veja também
Referências
- Audacity Wiki — Scripting — Compatível com Tenacity
- Python Documentation — Python 3 docs