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