Cutting Audio Files Without Re-encoding Preserves Quality

від

у

Різання аудіофайлів без повторного кодування зберігає якість

https://zovo.one/free-tools/mp3-cutter/

Щоразу cuando повторно кодуєте MP3, якість знижується. Втрати з компресії з втратами, застосовані двічі, дають гірші результати, ніж один раз. Рішення — різати на межах кадрів без декодування й повторного кодування.

Структура кадру MP3

MP3 файли не є безперервними потоками. Вони являють собою послідовність незалежних кадрів, кожен з яких містить заголовок та стислу звукову інформацію. Кожен кадр відповідає фіксованій тривалості звуку:

  • MPEG1 Layer 3: 1152 зразків на кадр
  • При 44.1 кГц: кожен кадр = 26.12 мс

Це означає, що ви можете різати MP3 на межах кадрів без декодування. Різання між кадрами зберігає стиск кожного кадру повністю. Різання всередині кадру потребує декодування кадру, обрізання зразків та повторного кодування.

Безвтратне різання

Термін „безвтратне” у контексті різання аудіо означає відсутність зниження якості. Для MP3 це досягається шляхом різання лише на межах кадрів.

Frame 1: 0-26ms
Frame 2: 26-52ms
Frame 3: 52-78ms
...

Якщо потрібно різати точно на 50 мс, у вас є два варіанти:

  1. Різати на 26 мс (межа кадру, без втрат)
  2. Різати на 52 мс (межа кадру, без втрат)
  3. Різати на 50 мс (потребує декодування кадру 2, повторного кодування, втрата якості)

У більшості випадків різання на найближчій межі кадру (з точністю до 26 мс) є майже непомітним. Людське вухо не відрізнить різницю у часі 26 мс на точці різання.

Поширені сценарії використання

Створення рінгтона. Виріжте 30-секундний фрагмент із пісні. Оптимальний підхід: знайдіть кадр, найближчий до бажаного старту та кінця, скопіюйте всі кадри між ними.

Редагування подкастів. Видаліть нічого не говорюче, запинки чи помилки. Різання з точною прив’язкою до кадрів цілком достатнє для редагування мови.

Створення зразка. Витягніть барабанну петлю або вокальний зразок із треку. Тут важливіші точні стартові та кінцеві точки, і можуть знадобитися зразково-активні (не кадрові) різання, які потребують декодування/повторного кодування.

Підхід Web Audio

У браузері різання аудіо включає декодування файлу, нарізку аудіобуфера та кодування результату:

async function cutAudio(file, startSec, endSec) {
  const ctx = new AudioContext();
  const buffer = await file.arrayBuffer();
  const audioBuffer = await ctx.decodeAudioData(buffer);

  const startSample = Math.floor(startSec * audioBuffer.sampleRate);
  const endSample = Math.floor(endSec * audioBuffer.sampleRate);
  const length = endSample - startSample;

  const newBuffer = ctx.createBuffer(
    audioBuffer.numberOfChannels,
    length,
    audioBuffer.sampleRate
  );

  for (let ch = 0; ch < audioBuffer.numberOfChannels; ch++) {
    const oldData = audioBuffer.getChannelData(ch);
    const newData = newBuffer.getChannelData(ch);
    for (let i = 0; i < length; i++) {
      newData[i] = oldData[startSample + i];
    }
  }

  return newBuffer;
}

Для різання MP3-файлів із візуальним відображенням хвильової форми та точним вибором я створив різак за адресою zovo.one/free-tools/mp3-cutter. Він працює повністю у браузері, показує хвильову форму для візуального різання та експортує результат без завантаження вашого аудіо на будь-який сервер.

Я — Майкл Ліп. Я створюю безкоштовні інструменти для розробників на zovo.one. понад 500 інструментів, усі приватні, усі безкоштовні.

HI-FI News

через DEV Community: javascript https://ift.tt/9aq0gIZ

25 березня 2026 р. о 03:16 (AM)

March 25, 2026 at 03:16AM