Боюся, Джеймс Р помиляється, принаймні, нещодавно, як ffmpeg 3.4.2, але це звичайне непорозуміння. На жаль, це давня помилка в тому, як ffmpeg використовує libmp3lame. Він встановлює заголовок на Joint Stereo, але насправді не кодує в Joint Stereo. MP3-програвачі, для яких потрібен Joint Stereo, задушаться цими файлами. Параметр -joint_stereo 1 НЕ працює як параметр у ffmpeg. Дивіться відкритий звіт про помилку: https://trac.ffmpeg.org/ticket/4954
Я використовую кульгавий або сокс, щоб встановити MP3-файли на спільні стереосистеми після внесення інших змін у ffmpeg. Я б хотів, щоб це не було необхідним, особливо при роботі зі збитковими MP3-файлами, де кожна дія над файлами їх трохи знижує, але це не дуже погано.
Наприклад, у Windows (це працює з CMD, а не з PS), ось ось команда, яку я часто використовую для пакетного перетворення та нормалізації з файлів WAV в MP3 через ffmpeg, а потім використовую SoX для встановлення на спільний стерео (вихід за замовчуванням). Один з найпростіших перевірок в Windows на Joint Stereo або Stereo - Mp3tag, і обов’язково покажіть стовпець "Mode", який просто скаже Mono, Stereo або Joint Stereo. Це також найпростіший спосіб підтвердити, що ffmpeg не здатний належним чином виводити в Joint Stereo.
для% x in ("* .wav") do (ffmpeg -i "% x" -ab 320k -f mp3 -af dynaudnorm -id3v2_version 3 "int_% x.mp3" & sox --norm = -2,75 "int_% x.mp3 "-c 2 -C 192" готовий-% x.mp3 ")
Я використовую більш високий бітрейт для проміжного файлу, ніж для кінцевого виводу (у цьому випадку 320 проти 192), щоб мінімізувати погіршення якості звуку.
Зауважте, що це дозволить залишити проміжні файли (int *) у тому самому каталозі, що й вихідні та заключні (готові *) файли.