Maneira rápida de descobrir quanto silêncio há no começo de um MP3?

4

O que é uma maneira rápida e fácil de descobrir quanto silêncio há no início de um MP3? Eu sei que há muito que entra nisso ... Eu não preciso de nada muito preciso. Dentro de 50 ou mais milissegundos é ótimo.

Eu tenho mais ou menos 1000 MP3s com os quais quero fazer isso, para que uma solução com a qual eu possa escrever seja a melhor. Obrigado!

Note que eu não quero cortar o silêncio, eu preciso saber a duração do silêncio.

    
por Hilton Campbell 06.04.2011 / 00:13

1 resposta

1

Como você não especificou seu sistema operacional, assumirei o Windows.

Use o ffmpeg em combinação com o PowerShell ISE

PowerShell

$folder = "C:\path\to\musicfolder"
$ffmpeg = "C:\path\to\ffmpeg.exe"

$content = "track start     track end   Filepath'n"
Get-ChildItem $folder -Recurse -Include *.mp3,*.ogg,*.flac  | foreach {        

    $log = & $ffmpeg -hide_banner -i '"$_'" -af "silencedetect=duration=2:noise=-50dB" -f null - 2>&1
    #echo [string]$log

    $totalLength = [string]$log | where {$_ -match '(?<= Duration:.*)[\d:\.]+' } | % {$matches[0]}        
    $totalLength = ([TimeSpan]::Parse($totalLength)).TotalSeconds

    [string[]]$silenceEnd = $log | where {$_ -match '(?<=silence_end: )[-\d\.]+' } | % {$matches[0]}            
    If ($silenceEnd.count -gt 0 -And [double]$silenceEnd[0] -lt $totalLength/2) {
        [string]$trackStart = $silenceEnd[0]
    } else {
        [string]$trackStart = 0
    }

    [string[]]$silenceStart = $log | where {$_ -match '(?<=silence_start: )[-\d\.]+' } | % {$matches[0]}                
    If ($silenceStart.count -gt 0 -And $silenceStart[$silenceStart.count-1] -gt $totalLength/2) {
        [string]$trackEnd = $silenceStart[$silenceStart.count-1]
    } else {        
        [string]$trackEnd = $totalLength
    }    
    $content += "$trackStart                $trackEnd       $_  'n"
}
Clear-Content "$folder\silenceLog.txt"
Add-Content "$folder\silenceLog.txt" $content

Exemplo de saída

  • A primeira coluna é um carimbo de tempo em segundos e milissegundos, em que o silêncio termina e a música começa
  • A segunda coluna é um carimbo de tempo em segundos e milésimos de segundo em que a música termina e o silêncio é iniciado
  • Terceira coluna é o caminho do arquivo
por 29.08.2015 / 02:03