Я пытаюсь создать скрипт Powershell, который просматривает папку для новых файлов MP3 и конвертирует их в формат M4A с использованием кодера FFMPEG и FDK AAC.
Поскольку fdkaac.exe
не будет принимать файлы MP3 в качестве входных данных, я использую эту команду, которая передает из ffmpeg:
ffmpeg -i $path -f caf - | fdkaac -p5 -b64 - -o $outfolder\$outname.m4a
Это прекрасно работает, если я ввожу его в командную строку, и полученный файл M4A не создает проблем.
Однако, если я запускаю это из Powershell, файл M4A создается, но не содержит ничего, кроме неприятного белого шума (и очень слабых следов музыки).
А идеи почему так?
Вот сценарий Powershell, если он помогает:
### SET FOLDER TO WATCH + FILES TO WATCH + SUBFOLDERS YES/NO
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "E:\test"
$watcher.Filter = "*.*"
$watcher.IncludeSubdirectories = $true
$watcher.EnableRaisingEvents = $true
$watcher.NotifyFilter = [IO.NotifyFilters]'FileName, Size'
### DEFINE ACTIONS AFTER A EVENT IS DETECTED
$action = { $path = $Event.SourceEventArgs.FullPath
$filename = $Event.SourceEventArgs.Name
$outname = [io.path]::GetFileNameWithoutExtension($path)
$outfolder = "C:\Users\Public\Music\"
$changeType = $Event.SourceEventArgs.ChangeType
$logline = "$(Get-Date), $changeType, $path"
Add-content "E:\log.txt" -value $logline
If ($path -match '.mp3|.m4a') {
$command = "ffmpeg -i `"$path`" -f caf - | fdkaac -p5 -b64 - -o `"$outfolder\$outname.m4a`""
Add-content "E:\log.txt" -value "[Transcode] $filename"
& command
}
}
### DECIDE WHICH EVENTS SHOULD BE WATCHED + SET CHECK FREQUENCY
$created = Register-ObjectEvent $watcher "Created" -Action $action
while ($true) {sleep 5}