|
|
|
interdude
  Стаж: 13 лет Сообщений: 5338
|
interdude ·
29-Июл-24 18:08
(1 год 5 месяцев назад, ред. 11-Янв-26 23:41)
Это не окончательный вариант. Тема для обсуждений.
Если кому-то есть что сказать, просьба не молчать.
SoX (Sound eXchange)
Основные преимущества утилиты:
- Высокая точность ресемплирования (выше eac3to с ресемплером SSRC);
- Свободный коэффициент изменения скорости (полезно при работе со звуковыми дорожками с нестандартной скоростью воспроизведения);
- Кроссплатформенность (Windows / MacOS / Linux).
Установка и регистрация в "Переменных средах"
- Скачиваем последнюю стабильную версию и распаковываем архив в любое удобное место, не требующее дополнительных прав на доступ;
- Строго рекомендуется: переименовать файл sox_ng.exe в sox.exe, чтобы в дальнейшем упростить жизнь себе и окружающим. На работоспособность программы это никак не повлияет;
- Важно: данная инструкция рассчитана на сборку SoX со встроенной библиотекой libsndfile (включена поддержка формата W64). Версии без этой библиотеки не подходят;
- SoX - консольная утилита, поэтому для удобства работы регистрируем её в "Переменных средах" (системная переменная PATH). В противном случае, придётся каждый раз указывать полный путь к exe-файлу:
---
Windows XP/7:
- Вариант 1: Пуск > Панель управления > Система и безопасность > Система > Дополнительные параметры системы > Дополнительно > Переменные среды
- Вариант 2: Win+R > sysdm.cpl > Дополнительно > Переменные среды
- В поле системные переменные выбрать переменную "Path", нажать "Изменить", добавить в конце строки символ ";", затем адрес папки sox.exe, подтвердить.
Windows 10/11:
- Вариант 1: Поиск > перемен > Изменение системных переменных сред > Переменные среды
- Вариант 2: Win+R > sysdm.cpl > Дополнительно > Переменные среды
- В поле "Системные переменные" зайти в переменную "Path", нажать "Создать", затем нажать "Обзор" и указать путь до папки с файлом sox.exe.
- Если всё сделано правильно, то при вводе в командной строке sox появится следующая информация:
Изменение скорости звуковых дорожек:
На вход подаётся 24-/32-битный WAV или 24-битный W64 писал(а):
sox -S input.wav output.wav speed коэффициент rate -u -s
sox -S input.w64 output.w64 speed коэффициент rate -u -s
На вход подаётся 16-битный WAV/W64 писал(а):
sox -S input.wav -b 24 output.wav speed коэффициент rate -u -s
sox -S input.w64 -b 24 output.w64 speed коэффициент rate -u -s
Примечания:
- Важно: утилита не умеет полноценно работать с 32-bit float, размер WAV на входе ограничен 2 Гб и в ней не предусмотрен "второй проход" (по примеру eac3to) для устранения проблем, которые могут возникнуть в момент преобразования. Все проблемы (чаще всего, это будет размер и клиппинг) придётся решать самостоятельно, заранее подготовив дорожку к работе в SoX.
- В связи с этим, чтение лога становится важным критерием качественного преобразования звуковых дорожек:
Примеры логов
Пример штатного лога:
Duration: 01:55:17.66 / In:100% / Clip:0 - фактическая продолжительность / файл обработан полностью / без клиппинга. Пример лога, требующего вмешательства (1):
Duration: 01:55:17.66 / In:100% / Clip:12 - фактическая продолжительность / файл обработан полностью / обнаружен клиппинг.
Дорожке требуется предварительная нормализация с помощью ключа --norm.
Рекомендуется: запас по шкале (headroom) не менее 3 дБ (-3 dBFS). С этим значением чаще всего удаётся избежать клиппинга при любых формах амплитуды.
Строго не рекомендуется: использовать ключ -G или --guard, а также ключ --norm без указания конкретного значения - нормализация не будет корректной.
Пример нормализации до значения -3 dBFS писал(а):
sox -S --norm=-3 input.w64 output.w64 speed коэффициент rate -u -s
Пример лога, требующего вмешательства (2):
Duration: 00:32:26.64 / In:100% / Clip:0 - продолжительность ограничена / файл обработан полностью / без клиппинга.
Размер дорожки превышает 2 Гб (обработаны первые полчаса из двух). Дорожку необходимо преобразовать в формат W64 (не выше 24-bit integer).
Рекомендуется: воспользоваться для получения W64 утилитой eac3to, которая умеет корректно обходить ограничение на размер формата WAV.
Не рекомендуется: использовать ключ --ignore-length для обхода ограничений. В конце полученной дорожки могут появиться артефакты.
Пример преобразования WAV в W64 с помощью eac3to писал(а):
eac3to input.wav output.w64
- По умолчанию SoX возвращает полученной дорожке исходную разрядность, что крайне не рекомендуется делать, когда речь идёт о 16 битах.
По этой причине вводится ключ -b 24, чтобы на выходе получить 24-bit integer.
- Ключ -b 24 можно заменить на -e float и получить на выходе 32-bit float.
- Дорожку в 32-bit float (WAV, но не W64) можно подавать и на вход, но с осторожностью, заранее убедившись, что в ней отсутствуют переполнения ("плавающая запятая" это позволяет).
На все переполнения на входе SoX не реагирует, а просто их срезает (целочисленная точность). Ключ -e float в этом случае не нужен.
- Краткое описание основных ключей:
-S - отображает информацию о ходе операции (обязательный ключ);
--norm - нормализация входящей дорожки (например, --norm=-3). Необходим только при обнаружении клиппинга (см. Примеры логов);
speed - команда для изменения скорости дорожки, где коэффициент может быть стандартным (см. ниже) или любым;
rate - задаёт качество ресемплирования: -u - сверхвысокое (полоса пропускания - 95%), -s - увеличивает полосу пропускания с 95% до 99%.
- Если на вход подаётся дорожка с частотой дискретизации 44 кГц, а на выходе требуется 48, то в конец команды rate нужно добавить 48k (например, rate -u -s 48k).
- Преобразования не ограничены родственностью формата. Возможны все варианты: WAV -> WAV / WAV -> W64 / W64 -> WAV / W64 -> W64.
- Отменить текущую операцию можно в любой момент сочетанием клавиш Ctrl+C.
Стандартные коэффициенты изменения скорости
Код:
-----------------------------------------------------------------------
Начальная скорость | Конечная скорость | Коэффициент |
-----------------------------------------------------------------------
-----------------------------------------------------------------------
24p | 23.976 (NTSC) | 0.999000999000999 |
-----------------------------------------------------------------------
23.976 (NTSC) | 24p | 1.001 |
-----------------------------------------------------------------------
-----------------------------------------------------------------------
25 (PAL) | 23.976 (NTSC) | 0.959040959040959 |
-----------------------------------------------------------------------
23.976 (NTSC) | 25 (PAL) | 1.042708333333330 |
-----------------------------------------------------------------------
-----------------------------------------------------------------------
25 (PAL) | 24p | 0.960 |
-----------------------------------------------------------------------
24p | 25 (PAL) | 1.041666666666670 |
-----------------------------------------------------------------------
- Округлять стандартные коэффициенты нельзя - падает точность преобразований.
|
|
|
|
semёn_52
  Стаж: 14 лет 2 месяца Сообщений: 2995
|
semёn_52 ·
25-Дек-25 18:13
(спустя 1 год 4 месяца, ред. 27-Дек-25 18:42)
Всё не проверял сразу скажу! Но сделал следующие тесты. Перетяжка центрального канала дороги мульта из 23.976 в 24 и обратно. 1 скрин - оригинал. 2 скрин - первый перетяг. 3 скрин - обратный перетяг. 4 скрин - микс оригинала и инвертированного обратного перетяга. 5 скрин - увеличение микса (что отрезано от оригинала, то в миксе и осталость)
1. SoX
Код:
sox -S d:\1\2\test.wav d:\1\2\test_newsox.wav speed 1.001
sox -S d:\1\2\test_newsox.wav d:\1\2\test_backsox.wav speed 0.999000999000999
В итоге.
- подрезает верхние частоты (как на твоих скринах в теме пережатия дорожек), хотя у меня и не заметно, т.к. у меня срезает какие-то пики.
- что отрезалось, то осталось в миксе.
- длительность дороги совпадает (видно на 4 скрине)
2. eac3to 3.34 (по умолчанию SSRC (Shibata Sample Rate Converter) был немного оптимизирован by madshi) это в инструкции в спойлере команд -slowdown, -speedup, -23.976, -changeTo24.000, -r8brain
Код:
eac3to d:\1\2\test.wav d:\1\2\test_neweac.wav -changeto24.000 -23.976
eac3to d:\1\2\test_neweac.wav d:\1\2\test_backeac.wav -changeto23.976 -24.000
В итоге.
- не срезает частоты.
- прога добавила в начало дороги 2 сэмпла тишины (пришлось отрезать)
- прога добавила в конец дороги 270 сэмплов тишины (разность длины видно на скрине 4 (67065844-67066112 = 272 = 2+270))
- микс так себе
3. eac3to 3.55 (по умолчанию SSRC (Shibata Sample Rate Converter) был немного оптимизирован by madshi)
Код:
e:\Soft\eac3to_3.55\eac3to.exe d:\1\2\test.wav d:\1\2\test_neweac.3.55.wav -changeto24.000 -23.976
e:\Soft\eac3to_3.55\eac3to.exe d:\1\2\test_neweac.3.55.wav d:\1\2\test_backeac.3.55.wav -changeto23.976 -24.000
В итоге.
- не срезает частоты.
- прога добавила в начало дороги 2 сэмпла тишины (пришлось отрезать)
- прога добавила в конец дороги 270 сэмплов тишины (разность длины видно на скрине 4 (67065844-67066112 = 272 = 2+270))
- микс так себе
4. eac3to 3.34 (Ресэмплер 2. r8brain)
Код:
eac3to d:\1\2\test.wav d:\1\2\test_neweac.r8brain.wav -changeto24.000 -23.976 -r8brain
eac3to d:\1\2\test_neweac.r8brain.wav d:\1\2\test_backeac.r8brain.wav -changeto23.976 -24.000 -r8brain
В итоге.
- подрезает верхние частоты.
- что отрезалось, то осталось в миксе.
- длительность дороги совпадает (видно на 4 скрине). Ни чего не добавлено ни в конце, ни в начале
- микс лысый, но видно, что шумы остаются.
Вывод. SoX использует ресэмплер похожий на r8brain, но почемуто микс лучше... И в eac3to чем дальше от начала дороги, тем больше "шума" остается в миксе
Получается: или срез частот небольшой, но как бы без изменений амплитуды или без среза частот, но с изменённой местами амплитудой.
|
|
|
|
interdude
  Стаж: 13 лет Сообщений: 5338
|
interdude ·
25-Дек-25 18:23
(спустя 9 мин., ред. 25-Дек-25 18:23)
"Ярковато" получается. И ломает строй. Надо подумать. Про "без сохранения" убрал. А под спойлером твой изначальный вариант на 100% смотрится и читается лучше.
|
|
|
|
semёn_52
  Стаж: 14 лет 2 месяца Сообщений: 2995
|
semёn_52 ·
25-Дек-25 19:31
(спустя 1 час 8 мин., ред. 27-Дек-25 18:41)
теперь по делу.
Заметил одну бяку. Щас проверю, наделаю скринов и скину сюда
Итак.
1 скрин - три разные команды
первая - перетяжка без опции --ignore-length
вторая - перетяжка с опцией --ignore-length (появилась инфа о клиппинге)
третья - обратная перетяжка с опцией --ignore-length (так же есть инфа о клиппинге)
2 скрин - сравнение результатов первой и второй команд (добавлена в конце дорожки какая-то хрень)
3 скрин - увеличение сравнения результатов первой и второй команд (добавлена в конце дорожки какая-то хрень)
4 скрин - микс оригинала и инвертированного результата второй команды
5 скрин - увеличение микса оригинала и инвертированного результата второй команды (курсор стоит на окончании длины тестового оригинала)
Вот такая эпидерсия! проверял разные сочетания ключей в командной строке. Такое дерьмо в конце перетянутой дороги даёт именно --ignore-length
|
|
|
|
interdude
  Стаж: 13 лет Сообщений: 5338
|
interdude ·
25-Дек-25 19:34
(спустя 2 мин.)
semёn_52
Файл, скорее всего, больше 4 Гб, и в первом случае утилита просто не добралась до клиппинга.
|
|
|
|
semёn_52
  Стаж: 14 лет 2 месяца Сообщений: 2995
|
semёn_52 ·
25-Дек-25 19:45
(спустя 10 мин., ред. 25-Дек-25 19:45)
interdude
Нет. test.wav 268 269 544 байт
Исходный файл тот же, когда я делал первые сравнения в ЛС с обратными перетяжками разными программами
И в конце тестового файла 100% тишина Можно и не заметить. Там всего 25 мс добавляет примерно. Глянь у себя тоже
|
|
|
|
interdude
  Стаж: 13 лет Сообщений: 5338
|
interdude ·
25-Дек-25 19:52
(спустя 7 мин.)
semёn_52
Лучше на твоем файле.
|
|
|
|
semёn_52
  Стаж: 14 лет 2 месяца Сообщений: 2995
|
semёn_52 ·
25-Дек-25 20:01
(спустя 8 мин., ред. 25-Дек-25 20:01)
interdude писал(а):
88622845"Ярковато" получается. И ломает строй. Надо подумать.
Просто в тэге box виднее выделение цветов.
interdude писал(а):
88622845И ломает строй.
Тут согласен. Вся инструкция в целом так же сделана. Читабельно вроде. Можно и не менять, да.
interdude писал(а):
88623190semёn_52
Лучше на твоем файле.
http://sendfile.su/1745220
|
|
|
|
interdude
  Стаж: 13 лет Сообщений: 5338
|
interdude ·
25-Дек-25 20:25
(спустя 24 мин.)
semёn_52
Да, на некоторых своих файлах такая же ерунда.
Это серьёзная проблема. Если не смогу побороть, то сворачиваем лавочку.
|
|
|
|
semёn_52
  Стаж: 14 лет 2 месяца Сообщений: 2995
|
semёn_52 ·
25-Дек-25 20:37
(спустя 12 мин., ред. 25-Дек-25 20:37)
interdude писал(а):
86530439преимущества
В преимущества проги можно добавить кроссплатформенность (Windows / Mac / Linux)
Цитата:
SoX - консольная утилита, поэтому для удобства работы регистрируем её в "Переменных средах" (системная переменная PATH). В противном случае, придётся каждый раз указывать полный путь к exe-файлу
Добавить " и не будет работать пакетное преобразование"
interdude писал(а):
88623299Это серьёзная проблема. Если не смогу побороть, то сворачиваем лавочку.
ОК
Тогда может быть имеет смысл вытащить на свет r8brain для eac3to? А то эта опция сильно закинута в дебри
|
|
|
|
interdude
  Стаж: 13 лет Сообщений: 5338
|
interdude ·
25-Дек-25 20:49
(спустя 11 мин.)
semёn_52 писал(а):
88623341Тогда может быть имеет смысл вытащить на свет r8brain для eac3to
А там не тот r8brain, с которым сравнивали. В еак встроен free, а сравнивали платную Pro.
|
|
|
|
interdude
  Стаж: 13 лет Сообщений: 5338
|
interdude ·
25-Дек-25 23:34
(спустя 2 часа 44 мин.)
semёn_52
В общем, пока что единственное решение, это использовать SoX со встроенной библиотекой libsndfile: https://hydrogenaudio.org/index.php/topic,120839.0.html
В такой сокс можно подавать .W64 файлы, не требующие --ignore-length. При этом на выходе можно указывать .WAV.
Осталось перепроверить эту версию на всё остальное. Страдания не должны заканчиваться.
|
|
|
|
interdude
  Стаж: 13 лет Сообщений: 5338
|
interdude ·
26-Дек-25 08:45
(спустя 9 часов)
semёn_52
Теперь не получается заставить программу нормализовывать дорожку с переполнениями до преобразования. Срезает всё, а потом что-то там себе нормализует.
В общем, утилита предназначена строго для работы с 24-bit integer, не выше. При этом желательно заранее подготовить дорожку - дать запас по шкале, потому что нормализация здесь работает не по-человечески.
Всё это будет создавать лишнюю суету при работе, как следствие - повышается вероятность накосячить.
В той же eac3to все возникающие проблемы решает "второй проход".
Мне кажется, все настолько привыкли к float, что возвращаться к integer, да еще с такими "особенностями" - ну это такое себе.
|
|
|
|
semёn_52
  Стаж: 14 лет 2 месяца Сообщений: 2995
|
semёn_52 ·
26-Дек-25 09:38
(спустя 53 мин., ред. 27-Дек-25 23:34)
interdude
Итак, в плане перетяжки дорожек получается, что SOX ограничен файлами wav более 2 ГБ. Ведь без ключа --ignore-length sox тянет лучше eac3to. И основной плюс sox в перетяжке нестандартных коэффициентов и кроссплатформенности.
То, что sox добавляет мусор в конец перетянутой дорожки если добавить ключ --ignore-length решаемо в любом аудиоредакторе за пару кликов. Основную дорожку он при этом тянет без искажений и оригинал миксуется с инвертированным обратным перетягом опять в ноль, кроме добавленного мусора. Может надо посмотреть сколько он добавляет? Всегда одинаково или нет...
С другой стороны, сколько бы он ни добавил, всё это можно сделать тишиной в аудиоредакторе. Ведь с точки зрения воспроизведения совместно с видео длина аудио не особо важна. При кодировании, например, в AC3 тоже надо отрезать 256 сэмплов от начала дороги хоть тресни. Ничего. Справляемся как-то. А тут и отрезать не надо. В аудишене мышью выделил, ПКМ на выделении, выбрать "Тишина", Ctrl+S (сохранил). Всё.
Ещё один минус - максимум 25 бит на выходе. Минус этот как бы и не минус, а вполне себе допустимо.
Моё мнение - SOX однозначно стОит внимания.
|
|
|
|
interdude
  Стаж: 13 лет Сообщений: 5338
|
interdude ·
26-Дек-25 10:00
(спустя 21 мин., ред. 26-Дек-25 10:00)
semёn_52
Просто хочется решения по типу "подал-получил", как eac3to.
Тут же всё идет к тому, что утилита будет рассчитана на максимально уверенных в себе парнишей, которые могут заранее всё предусмотреть и подготовить дорожку так, что к ней будет не докопаться.
Получится так, что в инструкции к соксу вначале будет огромная простыня о том, что можно делать, а что не можно. Обычный пользователь, увидев эту красоту, скажет "да ну на хер" и уйдёт в еак, в которой, повторюсь, все проблемы решает "второй проход". Вообще все. Проблему с --ignore-length решает билд сокса совместимый с W64.
|
|
|
|
semёn_52
  Стаж: 14 лет 2 месяца Сообщений: 2995
|
semёn_52 ·
26-Дек-25 11:05
(спустя 1 час 4 мин.)
Тогда херим тему, получается. Раз не получается)
|
|
|
|
interdude
  Стаж: 13 лет Сообщений: 5338
|
interdude ·
26-Дек-25 14:54
(спустя 3 часа)
|
|
|
|
interdude
  Стаж: 13 лет Сообщений: 5338
|
interdude ·
27-Дек-25 11:27
(спустя 20 часов)
semёn_52
Ладно, продолжим.
|
|
|
|
semёn_52
  Стаж: 14 лет 2 месяца Сообщений: 2995
|
semёn_52 ·
27-Дек-25 12:42
(спустя 1 час 15 мин.)
Давай тему в раздел обработки аудио и видео закинем. Может кто ещё мысли свои выскажет?
|
|
|
|
interdude
  Стаж: 13 лет Сообщений: 5338
|
interdude ·
27-Дек-25 12:55
(спустя 12 мин.)
|
|
|
|
semёn_52
  Стаж: 14 лет 2 месяца Сообщений: 2995
|
semёn_52 ·
27-Дек-25 17:57
(спустя 5 часов)
interdude
переноси. Ты - топикстартер
|
|
|
|

|
bot ·
27-Дек-25 18:15
(спустя 18 мин.)
|
|
|
|
semёn_52
  Стаж: 14 лет 2 месяца Сообщений: 2995
|
semёn_52 ·
27-Дек-25 18:40
(спустя 43 мин.)
Поменял своё первое сообщение в теме на свои тесты в первых наших обсуждениях
|
|
|
|
Drommer.94
 Стаж: 15 лет 4 месяца Сообщений: 250
|
Drommer.94 ·
27-Дек-25 22:50
(спустя 4 часа)
Если правильно понимаю, то обсуждение было про перетягивание без сохранения тональности.
Однако для перетягивания с сохранением тональности использовать SoX точно не вариант. Даже ffmpeg справляется лучше. P.S. В какой момент и почему решили, что SoX лучше, чем eac3to, ведь во втором посте написано, что SoX срезает верхние частоты?
|
|
|
|
semёn_52
  Стаж: 14 лет 2 месяца Сообщений: 2995
|
semёn_52 ·
27-Дек-25 23:13
(спустя 23 мин., ред. 27-Дек-25 23:13)
Без сохранения. Путаю глаголы)
Drommer.94 писал(а):
88631727ведь во втором посте написано, что SoX срезает верхние частоты?
Начиналось с этого, да. Срез частот победили командой
Drommer.94 писал(а):
88631727P.S. В какой момент и почему решили, что SoX лучше, чем eac3to
Не лучше. Как бы точнее. Если сделать микс оригинала с инвертированным обратным перетягом, то это видно наглядно на скринах во втором посте
|
|
|
|
interdude
  Стаж: 13 лет Сообщений: 5338
|
interdude ·
27-Дек-25 23:14
(спустя 18 сек.)
Drommer.94 писал(а):
88631727SoX срезает верхние частоты
Это уже не актуально. Полосу пропускания можно "разогнать" и до 99,7%. Там, правда, есть о чем подумать, стоит оно того или нет.
В остальном, тут был проделан простой опыт. SoX и eac3to перетягивали одну и ту же дорожку туда и обратно (допустим NTSC -> PAL -> NTSC). Затем их результат противофазился с исходником. После сокса остатки на уровне погрешности - практически ноль (дорожка вернулась в прежнее состояние), а еак так не умеет - точность ниже.
Хотя я не уверен, что на слух это возможно будет определить. Тут скорее формально-математическая точность.
SoX, если все закончится нормально, в дальнейшем будет особенно полезен для нестандартных скоростей.
|
|
|
|
Drommer.94
 Стаж: 15 лет 4 месяца Сообщений: 250
|
Drommer.94 ·
27-Дек-25 23:20
(спустя 6 мин.)
Понял, спасибо.
interdude ещё писал про проблему с клиппингом. Проблема именно в той версии, что поддерживает W64 или глобальная?
Цитата:
SoX, если все закончится нормально, в дальнейшем будет особенно полезен для нестандартных скоростей.
Да, это полезно.
|
|
|
|
interdude
  Стаж: 13 лет Сообщений: 5338
|
interdude ·
27-Дек-25 23:26
(спустя 6 мин.)
Drommer.94
Глобальная. Или я что-то делаю не так, или у автора программы было очень странное видение борьбы с переполнением.
|
|
|
|
Drommer.94
 Стаж: 15 лет 4 месяца Сообщений: 250
|
Drommer.94 ·
27-Дек-25 23:48
(спустя 21 мин.)
Вероятно, вопрос покажется глупым, но как вы поняли, что он сначала срезает, а потом что-то нормализует?
|
|
|
|
interdude
  Стаж: 13 лет Сообщений: 5338
|
interdude ·
28-Дек-25 09:04
(спустя 9 часов, ред. 28-Дек-25 09:04)
Drommer.94
Подал в неё дорожку в 32-float с экстремально большими переполнениями. Подставлял и -G, и --norm - ничего не помогало.
Получается, эти ключи предназначены только для дорожки на выходе, если в момент преобразования амплитуда вылетает за 0.
Надо будет проверить, сравнив с еаком, и потом подкорректировать описание, но уже уверен, что всё так и есть. Программа и в самом деле рассчитана строго на integer, где в принципе не может быть переполнений у файла на входе. Если кто-то знает или найдёт способ полноценно пропихнуть в неё float, будешь вообще сказка. Правда, я, наверное, сильно драматизирую. Многие до сих пор разбирают еаком в интегер с ключом -no2ndpass, лишь бы не нормализовывать. Срежет, не срежет - только не нормализация! А я тут за этим флоатом гоняюсь...
|
|
|
|