Благодаря тому, что здесь для разрезания по cue используется ffmpeg, а не престарелый shntool, а также ffmpeg используется для создания конечного файла вместо SoX, поддерживаются пути с юникодовскими символами.
К слову, способ с конвертером, описанный в https://foobar2000.ru/forum/viewtopic.php?t=6909 не работает в фубаре v2, т.к. в фубаре v2 по неизвестным пока причинам вообще не работают батники в конвертере.
Содержимое Path для Run services
- Код: Выделить всё
$puts(font,ArialUnicodeMS)$puts(Bat-Path-1,"C:\Create and open spectrogram cue.bat")$puts(Bat-Path-2,"C:\Create and open spectrogram.bat")$if($stricmp($ext(%path%),cue),$get(Bat-Path-1) $add($mul($ifequal($strchr(%__referenced_offset%,:),3,$cut(%__referenced_offset%,2),$cut(%__referenced_offset%,3)),60),$cut($right(%__referenced_offset%,5),2)).$pad_right($muldiv($muldiv($right(%__referenced_offset%,2),%samplerate%,75),1000000,%samplerate%),6,0) %length_ex% %length_samples% "$directory_path(%path%)\%__referenced_file%" "drawtext=''text=$replace(%__referenced_file%-%tracknumber%. %title%,'',’):font=$get(font):fontcolor=white:fontsize=$ifgreater($len(%__referenced_file%-%tracknumber%. %title%),170,16,20):x=5:y=10''" "$directory_path(%path%)\$ifgreater($len($directory_path(%path%)\%__referenced_file%-%tracknumber%. %title%),255,$cut(%__referenced_file%-%tracknumber%. %title%,$sub(255,$sub($len($directory_path(%path%)\%__referenced_file%-%tracknumber%. %title%),$len(%__referenced_file%-%tracknumber%. %title%)))),%__referenced_file%-%tracknumber%. %title%).png",$if($stricmp(%__cue_embedded%,yes),$get(Bat-Path-1) $add($mul($ifequal($strchr(%__referenced_offset%,:),3,$cut(%__referenced_offset%,2),$cut(%__referenced_offset%,3)),60),$cut($right(%__referenced_offset%,5),2)).$pad_right($muldiv($muldiv($right(%__referenced_offset%,2),%samplerate%,75),1000000,%samplerate%),6,0) %length_ex% %length_samples% "%path%" "drawtext=''text=$replace(%filename_ext%-%tracknumber%. %title%,'',’):font=$get(font):fontcolor=white:fontsize=$ifgreater($len(%filename_ext%-%tracknumber%. %title%),170,16,20):x=5:y=10''" "$directory_path(%path%)\$ifgreater($len($directory_path(%path%)\%filename_ext%-%tracknumber%. %title%),255,$cut(%filename_ext%-%tracknumber%. %title%,$sub(255,$sub($len($directory_path(%path%)\%filename_ext%-%tracknumber%. %title%),$len(%filename_ext%-%tracknumber%. %title%)))),%filename_ext%-%tracknumber%. %title%).png",$get(Bat-Path-2) "%path%" $if(%length_samples%,%length_samples%s,30) "$directory_path(%path%)\%filename%.png" "drawtext=''text=$replace(%filename_ext%,'',$char(8217)):font=$get(font):fontcolor=white:fontsize=$ifgreater($len(%filename_ext%),170,16,20):x=5:y=10''"))
Как видите, используются два разных батника. В примере батники находятся прямо на диске C:\. В путях к батникам нежелательно использовать скобки.
Содержимое самих батников:
Create and open spectrogram cue.bat
- Код: Выделить всё
cmd.exe /d /c "D:\0__CODECS\FFmpeg\ffmpeg.exe" -v 0 -drc_scale 0 -ss %1 -i %4 -t %2 -map_metadata -1 -f sox -|"C:\Program Files\SoX\sox.exe" -p -n spectrogram -d %3s -x 1600 -Y 1200 -t " " -o -|"D:\0__CODECS\FFmpeg\ffmpeg.exe" -v 16 -y -i - -vf %5 %6
mspaint.exe %6
del %6
Create and open spectrogram.bat
- Код: Выделить всё
cmd.exe /d /c "D:\0__CODECS\FFmpeg\ffmpeg.exe" -v 0 -drc_scale 0 -i %1 -map_metadata -1 -f sox -|"C:\Program Files\SoX\sox.exe" -p -n spectrogram -d %2 -x 1600 -Y 1200 -t " " -o -|"D:\0__CODECS\FFmpeg\ffmpeg.exe" -v 16 -y -i - -vf %4 %3
mspaint.exe %3
del %3
Пути к ffmpeg.exe и sox.exe замените на свои. Не забывайте про кавычки, если в путях есть пробелы, например
- Код: Выделить всё
"C:\Program Files\sox\sox.exe"
Параметр
- Код: Выделить всё
-f sox
Файл со спектрограммой генерируется в папке с исходным файлом и автоматически открывается в Paint. Для одиночных файлов име спектрограммы - имя аудиофайла с расширением png, для трека из image+cue - "имя файла-образа-номер трека. название трека". После закрытия Paint файл со спектрограммой автоматически удаляется. Программу для просмотра можно заменить на свою, прописав нужный путь вместо mspaint.exe. Автоматическое удаление можно отключить, удалив строку
- Код: Выделить всё
del %3
- Код: Выделить всё
mspaint.exe %3
del %3
phpBB [media]
32-битную сборку ffmpeg можно скачать здесь - https://github.com/sudo-nautilus/FFmpeg-Builds-Win32/releases
64-битную сборку ffmpeg можно скачать здесь - https://www.gyan.dev/ffmpeg/builds/ или здесь - https://github.com/BtbN/FFmpeg-Builds/releases
SoX - https://sourceforge.net/projects/sox/files/sox/14.4.2/sox-14.4.2-win32.zip/download
Шрифт задаётся в одном месте в самом начале команды - $puts(font,ArialUnicodeMS), где ArialUnicodeMS и есть имя шрифта.
Если указанный в команде ffmpeg шрифт отсутствует в системе, ffmpeg автоматически переключится на другой. Но, если в используемом шрифте отсутствуют какие-то символы, ffmpeg не может взять их из других шрифтов (или я не знаю, как настроить,чтобы он это делал) и заменит их на квадратики. Чтобы это случалось как можно реже, стоит использовать такой шрифт, в котором есть большинство символов, например ArialUnicodeMS. Шрифт ArialUnicodeMS - https://www.dropbox.com/s/578p7fpqvaq20g6/ARIALUNI.TTF?dl=1 Шрифт нужно установить в систему, чтобы ffmpeg мог его найти.