Como separar músicas em um único arquivo MP3 usando apenas silêncio – Linux puro

É comum encontrar arquivos MP3 longos contendo várias faixas em sequência. Quando não há metadados ou cue sheets, a única alternativa precisa é separar com base nos silêncios naturais entre as músicas. Neste post, você verá como fazer isso de forma automatizada no Linux, usando apenas ffmpeg e bash, sem ferramentas de terceiros nem interfaces gráficas.


Requisitos

Instale o ffmpeg, caso ainda não tenha:

sudo apt install ffmpeg

Etapa 1 – Detectando os silêncios

O ffmpeg possui um filtro chamado silencedetect, que analisa o áudio e exibe os pontos onde há silêncio.

ffmpeg -i arquivo.mp3 -af silencedetect=noise=-30dB:d=1 -f null - 2> silences.log

Explicação dos parâmetros:

  • noise=-30dB: define o que é considerado silêncio. Valores como -35dB ou -40dB podem funcionar melhor para arquivos com ruído de fundo.
  • d=1: duração mínima (em segundos) para que o trecho seja considerado um silêncio real.
  • 2> silences.log: salva os logs de detecção de silêncio em um arquivo para posterior análise.

Esse comando processa o áudio completo, independente do tempo de duração.


Etapa 2 – Interpretando a saída

O arquivo silences.log gerado contém trechos como:

[silencedetect @ ...] silence_start: 123.45
[silencedetect @ ...] silence_end: 125.67 | silence_duration: 2.22

Cada par silence_start e silence_end marca um espaço onde há silêncio, ou seja, um possível delimitador entre faixas.


Etapa 3 – Script completo para separar as faixas

Este script analisa os silêncios detectados e corta o arquivo automaticamente, gerando uma pasta com os trechos já separados.

Salve como split_por_silencio.sh:

#!/bin/bash

if [ -z "$1" ]; then
    echo "Uso: $0 arquivo.mp3"
    exit 1
fi

ARQUIVO="$1"
BASENAME=$(basename "$ARQUIVO" .mp3)
LOG="silences.log"
TMP="tempos.txt"

echo "[+] Detectando silêncios em '$ARQUIVO'..."
ffmpeg -i "$ARQUIVO" -af silencedetect=noise=-30dB:d=1 -f null - 2> "$LOG"

grep -E 'silence_start|silence_end' "$LOG" | awk '{print $NF}' > "$TMP"

echo "[+] Gerando comandos de corte..."
mkdir -p cortes
start=0
i=1

mapfile -t tempos < "$TMP"
for ((j=0; j<${#tempos[@]}; j+=2)); do
    silence_start=${tempos[j]}
    silence_end=${tempos[j+1]}
    out="cortes/${BASENAME}_parte$(printf "%02d" "$i").mp3"
    ffmpeg -y -i "$ARQUIVO" -ss "$start" -to "$silence_start" -c copy "$out"
    echo "  - Criado: $out"
    start=$silence_end
    ((i++))
done

DURACAO=$(ffprobe -i "$ARQUIVO" -show_entries format=duration -v quiet -of csv="p=0")
if (( $(echo "$start < $DURACAO" | bc -l) )); then
    out="cortes/${BASENAME}_parte$(printf "%02d" "$i").mp3"
    ffmpeg -y -i "$ARQUIVO" -ss "$start" -to "$DURACAO" -c copy "$out"
    echo "  - Criado: $out"
fi

echo "[✔] Finalizado. Arquivos salvos em ./cortes/"

Depois de salvar, torne-o executável:

chmod +x split_por_silencio.sh

E execute passando o arquivo MP3 como argumento:

./split_por_silencio.sh arquivo.mp3

Resultado

O script criará uma pasta cortes/ contendo os trechos automaticamente separados com base nos intervalos de silêncio detectados:

cortes/
├── nome_parte01.mp3
├── nome_parte02.mp3
├── ...

Dicas

  • Se os silêncios forem muito curtos, aumente d=1 para d=2 ou mais.
  • Se o volume do silêncio for muito baixo (como em gravações antigas), diminua o noise=-30dB para -35dB ou -40dB.

Alternativa com mp3splt

Se você preferir uma ferramenta pronta para cortar com base no silêncio, sem necessidade de script personalizado, pode usar o mp3splt.

Instalação:

sudo apt install mp3splt

Uso básico:

mp3splt -s -p th=-30,min=1 arquivo.mp3

Explicação:

  • -s: modo automático (auto split)
  • -p th=-30,min=1: define o threshold de silêncio em -30dB e duração mínima de 1 segundo

Esse comando cria vários arquivos MP3 separados automaticamente, com base nos pontos de silêncio detectados. É uma opção prática e rápida, embora com menos controle do que o script com ffmpeg.


Conclusão

Esse método é confiável, não depende de tags ID3, não exige software gráfico e funciona com qualquer arquivo MP3 longo. É o tipo de abordagem que prioriza eficiência e controle total, sem depender de softwares intermediários. O mp3splt também é válido para situações onde a praticidade é mais importante do que o controle detalhado.


Se quiser que essa solução seja integrada ao DevData como um CLI próprio ou ferramenta empacotada, entre em contato.

Rolar para cima