How to trim audio (MP3) files
Summary: PowerShell script to trim beginning and end of the audio (MP3, etc) files.
The following PowerShell script will remove the specified number of seconds from the beginning and/or end of every audio file with the given extension (.mp3 in this case) under the specified folder and all subfolders unerneath (requires FFmpeg binaries):
# Input folder holding audio files.
$inputDir = "Z:\Lectures"
# Seconds to trim from beginning of file.
$trimStart = 0.0
# Seconds to trim from the end of file.
$trimEnd = 9.0
# Path to the directory holding FFMPEG tools.
$ffmpegDir = "c:\ffmpeg\bin"
# Extension of the audio files.
$ext = ".mp3"
# Extension for temporary files.
$tmpExt = ".TMP$ext"
# Paths to FFMPEG tools.
$ffmpeg = Join-Path $ffmpegDir "ffmpeg.exe"
$ffprobe = Join-Path $ffmpegDir "ffprobe.exe"
# Process all audio files in the directory and subdirectories.
Get-ChildItem -LiteralPath $inputDir -Filter "*$ext" -Recurse -File | ForEach-Object {
# Original file path.
$oldFile = $_.FullName
# Original file name.
$oldName = $_.Name
# Temp file path will be in the same folder named after the original file.
$tmpFile = "$oldFile$tmpExt"
# Get the length of the audio track (it's a sting holding a floating number with possible new line).
$duration = (& $ffprobe -v 0 -show_entries format=duration -of compact=p=0:nk=1 $oldFile) | Out-String
$duration = $duration.Trim()
# Set new length of the audio by removing the trimmed parts.
$duration -= ($trimEnd + $trimStart)
# Trim the file.
& $ffmpeg -ss $trimStart -t $duration -i $oldFile -acodec copy $tmpFile
# Delete the original file.
Remove-Item -LiteralPath $oldFile -Force
# Rename the temp file to the original.
Rename-Item -LiteralPath $tmpFile $oldName -Force
}
