Пакетное преобразование сэмплов (win10)

Аватара пользователя
mrf
Member
Сообщения: 170
Зарегистрирован: 15 окт 2014, 17:54
Reputation: 102
Старый ник: mrf
Откуда: Екатеринбург

Пакетное преобразование сэмплов (win10)

Сообщение mrf » 29 мар 2018, 09:27

оказалось у меня есть лицензия на 4 гига сэмплов от LOOPMASTERS. круто, хотя наверное есть у каждого, кто владеет чем-нибудь из новэйшенов. с компом как то не очень музицируется, поэтому залил их в акай (в котором как раз сдшка на 4 гига), но нет. акаю непонравилось. оказывается сэмплы все 24 бит вав, а акай любит только 16 бит (спасибо медиаплеер классик - единственная прога, которая адекватно показывает инфу о медиафайлах). итак, у нас 3+ гига мелких вавок, куча папок, и конвертить каждый файл по отдельности в аудасити, разумеется, никто не будет. быстрое гугление призвало SOX - универсальный конвертер аудиофайлов. осталось только скормить ему эту кучу файлов. для этого, на мой взгляд, оптимальнее всего воспользоваться новомодным Windows PowerShell.
это мой первый опыт работы с ps. могу сказать только что в свое время были попытки написания подобных скриптов в CMD, но логика там менее очевидная, и изучать новый ps оказалось проще, чем вспоминать старый cmd.

скрипт:

Код: Выделить всё

$edpath = join-path $pwd "edited"
$wavefiles = Get-ChildItem -file -Recurse | resolve-path -relative
foreach ($wavefile in $wavefiles) {
    $wavefile = $wavefile.TrimStart(".\")
    $edfile = join-path $edpath $wavefile
    $sourcefile = join-path $pwd $wavefile
    $destfolder = split-path -path $edfile
    If(!(test-path $destfolder))
    {
        New-Item -ItemType Directory -Force -Path $destfolder
    }
    С:\path\to\sox-14.4.2-win32\sox\sox.exe $sourcefile -b16 $edfile
}

чуть более понятным оно становится в самом ps:
12.png

краткое описание
$edpath - переменная пути результата (текущая папка + edited)
Get-ChildItem -file -Recurse - выдает все файлы включая те, что в папках
| resolve-path -relative - добавляет к имени файла относительный путь (те папки, в которых он находится относительно текущей)
$wavefile = $wavefile.TrimStart(".\") - просто удаляем .\ чтобы потом ровно склеивать
$sourcefile = join-path $pwd $wavefile - полный путь до исходного файла - склеен из относительного пути до файла и текущего
$edfile = join-path $edpath $wavefile - полный путь до результирующего файла
$destfolder = split-path -path $edfile - полный путь до результирующей папки (убрали имя файла)
If(!(test-path $destfolder)) - проверка наличия папки результата, и соотв далее ее создание, чтобы соксу было куда сохранять
ну и в самом конце - вызов сокс

как он работает
- вызывается из конкретной папки, содержащей кучу папок с сэмплами, в которой создает папку "edited" и все папки с преобразованными сэмплами (Shift + правая кнопка мыши -> Open PowerShell window here)

как его применить
1 - замените "С:\path\to\sox-14.4.2-win32\sox\sox.exe" на полный путь до sox.exe файла на вашем компе
2 - укажите соксу параметры преобразования (к примеру можете отконвертить свой флак-винчестер в мп3 чтобы залить в плеер, или мп3 в вав, кароче что угодно в что угодно, необязательно акай)
3 - откройте повершелл и скопируйте туда измененный скрипт, энтер

ограничения
- скипт будет кормить соксу все подряд файлы без разбора, будь то jpg, txt или wav. соотв его можно доработать на проверку расширения перед запуском, но мне было проще заранее удалить неподходящие файлы.

вообщем у меня теперь 2.5 гига совместимых с акаем сэмплов. могу предположить существование готовых прог под эти цели, но мой опыт подсказывает мне, что скорее всего они платные, устанавливают какой-ниудь яндексбраузер, и про алгоритм конвертации там даже создатель не всегда в курсе. в sox конвертация полностью описана в документации, автоматически добавляется дизеринг, также можно очень гибко все настроить руками под конкретные задачи. пост наверное дофига мудреный, но может быть кому-нибудь окажется полезным.
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Аватара пользователя
Wedmer
Site Admin
Сообщения: 916
Зарегистрирован: 27 авг 2013, 15:50
Reputation: 316
Старый ник: G.M.D.
Откуда: bootSector

Re: Пакетное преобразование сэмплов (win10)

Сообщение Wedmer » 29 мар 2018, 10:23

Я где то уже писал на эту тему. Правда не помню, здесь или еще на старом трайбе. Чем именно конвертил, я не помню, кажется ffmpeg.

Отправлено спустя 7 минут 14 секунд:
Для тех, кто не хочет заморачиваться со скриптами