До списку уроків
8A · Урок 5 з 16

Як звук стає файлом: дискретизація і формула розміру

виконано0%
Крок 1

Що робимо сьогодні

Модуль I · IT Skills (Hardware & Multimedia) · тема 3, урок 1 з 2 · 120 хвилин

Пісня на телефоні — це файл. А з чого він складається?

Сьогодні розберемо, як коливання повітря перетворюється на числа. І навчимося рахувати розмір такого файлу наперед.

Після уроку ти вмієш

Слова дискретизація, розрядність і бітрейт поки нічого не означають. Розберемо їх по черзі.

Хід уроку

ЕтапХвЩо робимо
Перевірка інструментів10ffmpeg -version у кожного; кому не знайшло — ставимо разом
Хвиля → семпли20Дискретизація, Найквіст, чому 44,1 кГц
Розрядність і формула258 / 16 / 24 біти, живий калькулятор
Перерва10
З втратами чи без20WAV, FLAC, MP3, AAC, Opus; CBR і VBR
Свій термінал25ffprobe, перший out-320.mp3
Підсумок і ДЗ10Три параметри визначають розмір
Разом120
Головне правило теми: важке — локально, легке — на сервер ffmpeg і ffprobe ти запускаєш у терміналі власного комп'ютера (PowerShell або Terminal), у теці media/lesson-03/. На сервер по FTP іде тільки текст: probe-source.json, розрахунок і index.html. Файли source.wav і out-320.mp3 лишаються в тебе — FTP-приймальня їх усе одно відхилить.
Перше, що робить клас Відкрий свій термінал і виконай ffmpeg -version. Якщо команду не знайдено — підніми руку зараз, а не на двадцятій хвилині практики.
Чому тека зветься lesson-03, а урок — п'ятий Теки практики звуться за темою, а не за номером уроку. Тема 3 — це уроки 5 і 6, і обидва складають роботу в одну теку lesson-03/. Не шукай lesson-05: її немає.
Крок 2

Звук — це коливання, а не файл

Перш ніж рахувати байти, домовмося, що саме ми оцифровуємо

Кинь камінь у воду. По поверхні підуть кола. Приблизно так само поводиться повітря, коли звучить струна чи динамік.

Динамік штовхає повітря туди-сюди. Тиск біля твого вуха то зростає, то падає. Ця зміна тиску і є звук.

У хвилі два головні параметри. Перший — частота: скільки повних коливань за секунду. Міряють її в герцах, Гц.

Що вища частота, то вищий тон. Писк — це багато коливань, бас — мало.

Другий параметр — амплітуда: наскільки сильно змінюється тиск. Більша амплітуда — гучніше.

Вухо людини чує приблизно від 20 Гц до 20 000 Гц. Нижня межа тримається все життя.

А от верхня з віком опускається. У 8 класі це часто 18—19 кГц. У сорокарічної людини — уже близько 14—15 кГц.

Це нормальне вікове явище, а не зіпсований слух.

3,4 кГц — вище цього телефон ріже 440 Гц — нота ля ≈16 кГц — межа дорослого низи середина мова повітря 20 50 100 200 500 10к 20к частота, Гц · шкала логарифмічна
Низи 20—250 Гц — бас і гул; 250—2000 Гц — основа голосу й мелодії; 2—6 кГц — тут вухо найчутливіше і саме тут «сидить» розбірливість слів; вище 6 кГц — «повітря»: тарілки, шипіння звуків «с» і «ш».

Найважливіше для нас число тут — 20 кГц. Саме верхня межа слуху визначатиме, скільки разів на секунду треба міряти сигнал. Усе решта уроку виростає з неї.

Питання

Ти чуєш тонкий писк від старого телевізора, а дідусь у тій самій кімнаті каже, що жодного писку немає. Хто помиляється?

Крок 3

Дискретизація: хвиля перетворюється на числа

Комп'ютер не вміє зберігати криву. Він уміє зберігати список чисел

Мікрофон перетворює коливання тиску на коливання напруги. Це поки що аналоговий сигнал — безперервна крива без жодних чисел.

Далі за роботу береться окрема мікросхема. Її звуть АЦП — аналого-цифровий перетворювач.

Уяви, що ти щосекунди фотографуєш стрілку годинника. Кадри окремі, а рух по них видно.

АЦП робить те саме з напругою. Тисячі разів на секунду він міряє її й записує результат числом.

Одне таке вимірювання зветься семпл. Англійське sample означає «зразок», «проба».

крок 1 крок 2 крок 3 крок 4 крок 5 Звук Мікрофон АЦП Семпли Файл .wav коливання тиску повітря тиск у напругу, це ще аналог міряє напругу 44 100 раз/с список чисел: -7412, 901, 15006 заголовок 44 Б + ті самі числа
Оцифрування — це п'ять кроків. Файл на диску не «містить звук». Усередині лежить заголовок із параметрами і довгий рядок чисел. За цими числами звукова карта потім відтворює ту саму криву.

Скільки вимірів на секунду достатньо

На це питання є точна відповідь. Її дає теорема Котельникова — Найквіста.

На пальцях правило таке. На кожне коливання хвилі має припасти більше ніж дві точки.

Менше двох — і хвилю не відновити. Комп'ютер побачить зовсім іншу криву.

Тепер порахуємо. Вухо чує до 20 кГц. Множимо на два: виходить 40 000 Гц.

Менше за це число — і верхні звуки зникнуть. Набагато більше — зайві байти без жодного виграшу для вуха.

Часто: 8 вимірів на період Рідко: менше 2 на період сходинки майже повторюють хвилю пунктир — фальшива низька хвиля: аліасинг
Сіра лінія — справжній сигнал, крапки — виміри. Ліворуч точок вистачає, і форму видно. Праворуч точок менше двох на період: комп'ютер «побачить» зовсім іншу, нижчу хвилю. Той самий ефект ти бачив у кіно, коли колесо машини начебто крутиться назад.
Питання

Ти пишеш скрипку, у якої є обертони до 18 кГц, і виставив частоту дискретизації 30 кГц замість 44,1. Що станеться зі звуком?

Типові частоти дискретизації

ЧастотаДе застосовуютьЯкі частоти передає
8 000 Гцкласична телефонія, кодек G.711до ≈3,4 кГц: слова розбірливі, музика звучить бляшано
16 000 Гцголосові асистенти, «широкосмугова» мовадо ≈7 кГц: голос уже природний
44 100 Гцкомпакт-диск, MP3, більшість музикидо ≈20 кГц: увесь чутний діапазон
48 000 Гцвідео, кіно, професійна апаратурадо ≈22 кГц; зручно ділиться на кадрову частоту
96 000 Гцстудійний запис і зведеннязапас на обробку, а не для вуха

Чому саме 44 100, а не рівні 40 000

Число 44 100 виглядає випадковим. Насправді воно з історії.

Наприкінці 1970-х цифрового магнітофона ще не існувало. А записувати цифровий звук уже хотілося.

Тоді придумали хитрість: писати на звичайну відеокасету. Спеціальна приставка перетворювала семпли на подобу телевізійного сигналу.

У телекадрі рядків фіксована кількість. У кожен рядок клали три семпли.

Для американського стандарту виходило 3 × 245 × 60 = 44 100. Для європейського — 3 × 294 × 50 = теж 44 100.

Одне число підійшло обом системам. І воно було більшим за потрібні 40 000 Гц.

Так 44 100 Гц потрапило до стандарту компакт-диска (Red Book, 1980). І залишилося з нами дотепер — уже без жодних відеокасет.

Питання

Однокласник каже: «44,1 кГц узяли, бо саме ця частота найприємніша для вуха». Що насправді стоїть за цим числом?

Крок 4

Розрядність і канали: ще два множники розміру

Частота каже, як часто міряти. Розрядність — якою лінійкою, канали — скільки доріжок

Уяви лінійку без дрібних поділок — тільки сантиметри. Зріст 172,4 см ти на ній запишеш як 172.

АЦП працює такою самою лінійкою. Він не може записати «мінус 0,3718 вольта».

У нього є список дозволених рівнів, і кожен вимір округлюється до найближчого.

Скільки цих рівнів — залежить від числа бітів на семпл. Це число й зветься розрядність, англійською bit depth.

РозрядністьРівнівДинамічний діапазонДе трапляється
8 біт256≈ 48 дБстарі ігри, звуки системи 1990-х
16 біт65 536≈ 96 дБкомпакт-диск, звичайний WAV, MP3 після декодування
24 біти16 777 216≈ 144 дБстудійний запис, диктофони, зведення
32 біти floatпрактично без межіобробка всередині програм монтажу

Третій стовпчик таблиці зветься динамічний діапазон. Це відстань між найтихішим і найгучнішим звуком, який файл здатен передати.

Міряють цю відстань у децибелах, скорочено дБ. Децибел показує різницю в гучності між двома звуками, а не саму гучність.

Є просте правило: один біт додає близько 6 дБ.

16 біт дають 96 дБ. Цього вистачає, щоб в одній пісні були і шепіт, і удар барабана.

В останньому рядку таблиці стоїть 32 біти float. Float означає, що рівень записують не цілим числом, а дробом.

Дріб не впирається в стелю списку рівнів. Тому редактор звуку може на мить перевищити максимум і повернутися назад без спотворення.

У готових файлах float не трапляється. Він живе тільки всередині програм монтажу.

2 біти: усього 4 рівні 4 біти: 16 рівнів округлення грубе — з'являється шум квантування сходинки вже майже лягають на хвилю
Горизонтальні лінії — дозволені рівні. Кожен вимір «падає» на найближчий із них, і різниця між справжнім значенням та рівнем стає сторонньою домішкою — шумом квантування. Тут узято 2 і 4 біти, щоб різницю було видно; у справжньому CD рівнів 65 536.

Де малу розрядність чути найкраще? У тихих місцях.

Гучний звук використовує всі рівні лінійки. А тихому дістається лише кілька останніх.

Тому затухання останнього акорду перетворюється на зернисте шипіння.

Питання

Ти записав голос на диктофон і в паузах між фразами чути неприємну «зернистість». Файл: 44,1 кГц, 8 біт, моно. Що змінити насамперед?

Канали: скільки окремих доріжок у файлі

З розрядністю розібралися. Лишився останній множник формули — кількість каналів. Тут усе просто.

Моно — один потік чисел. Стерео — два незалежні: окремо лівий, окремо правий. Формат 5.1 — аж шість.

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

Для запису голосу моно цілком достатньо і економить половину розміру. Для музики стерео потрібне: без нього зникає розташування інструментів у просторі.

Крок 5

Формула розміру і живий калькулятор

Три множники — і розмір нестисненого аудіо відомий наперед

Нестиснене аудіо (WAV, AIFF) — це просто всі семпли підряд. Тому його розмір рахується точно, без жодних «приблизно»:

Розмір у байтах частота (Гц) × розрядність (біт) × канали × тривалість (с) ÷ 8

Розберемо формулу по кроках. Інакше це просто заклинання.

Частота × канали. Скільки семплів народжується за секунду.

× розрядність. Скільки це бітів за секунду. Саме це число і звуть бітрейтом.

÷ 8. Переходимо від бітів до байтів.

× секунди. Набігає повний розмір файлу.

Для компакт-диска: 44 100 × 16 × 2 = 1 411 200 біт/с, тобто 1411,2 кбіт/с. Це 176 400 байтів щосекунди, або приблизно 10,6 МБ на кожну хвилину музики.

Хвилина — 60 с, три хвилини — 180 с, година — 3600 с. Спершу порахуй у зошиті, потім звіряй тут.

МБ і МіБ — це різні числа Ми рахуємо в десяткових мегабайтах: 1 МБ = 1 000 000 байтів. Провідник Windows показує мебібайти: 1 МіБ = 1 048 576 байтів, тому те саме число там виглядає приблизно на 5% меншим. Калькулятор показує обидва — у звіті завжди підписуй, у чому міряєш.
Чому реальний WAV трохи більший Формула рахує самі семпли. Крім них у файлі є заголовок — зазвичай 44 байти, іноді більше, якщо програма дописала теги. На десятисекундному файлі це соті частки відсотка, тому автоперевірка й дає допуск ±3%.
Питання

Диктофон пише лекцію в WAV: 48 кГц, 24 біти, стерео. Учитель говорить годину. Скільки приблизно займе файл?

Крок 6

Без стиснення, без втрат і з втратами

Три різні відповіді на питання «як зменшити ці мегабайти»

Хвилина музики важить 10 МБ. Це багато. Зменшити її можна трьома різними способами.

Перший спосіб: не зменшувати взагалі. Так роблять WAV і AIFF — зберігають усі семпли як є.

Розмір величезний, зате чесність повна. У такому форматі працюють на монтажі, а не носять у телефоні.

Другий спосіб: стиснути без втрат. Це FLAC і ALAC.

Уяви ковдру, згорнуту в рулон. Місця займає менше, а сама ковдра ціла. Розгорнув — усе на місці.

Так само й тут. Розпакований файл збігається з оригіналом біт у біт.

Стискає FLAC помірно: готовий файл важить 50—60% від WAV. Тобто меншає приблизно вдвічі, а не вдесятеро.

Третій спосіб: викинути зайве назавжди. Це MP3, AAC і Opus.

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

Головний прийом зветься маскування. Поруч із гучним звуком тихий не чути взагалі — його й не зберігають.

Це як розмова біля працюючої дрилі. Слова є, а розібрати їх неможливо.

Другий прийом — зрізати найвищі частоти. На 128 кбіт/с MP3 часто обрізає все вище 16 кГц.

WAV FLAC MP3 320 MP3 128 31,8 МБ ≈18 МБ 7,2 МБ 2,9 МБ трек 3 хвилини, стерео, джерело 44,1 кГц / 16 біт
MP3 128 менший за WAV приблизно в 11 разів, MP3 320 — у 4,4 раза, а FLAC — лише десь удвічі, зате нічого не втрачає. Для FLAC узято типові для музики 55—60% від оригіналу: точна цифра залежить від самого запису.

Формула для стисненого аудіо

Для стисненого файлу рахувати ще простіше. Множники тут лише два: бітрейт × секунди ÷ 8.

Порахуємо MP3 на 320 кбіт/с тривалістю 180 секунд. 320 000 × 180 ÷ 8 = 7 200 000 байтів.

Тобто 7,2 МБ. Проти 31,8 МБ у WAV.

ФорматТипКоли доречний
WAVбез стисненняджерело для монтажу, вимір, здача практичних робіт
FLACбез втратдомашній архів музики, коли диск дозволяє
MP3з втратамисумісність із чим завгодно: старі плеєри, магнітоли
AACз втратамита сама якість за меншого бітрейта; відео, стримінг
Opusз втратамиголос і низькі бітрейти: дзвінки, Discord, вебстріми

CBR і VBR

Бітрейт можна тримати сталим, а можна міняти по ходу треку. Звідси дві абревіатури.

CBR — сталий бітрейт. Кожна секунда важить однаково.

Розмір такого файлу легко порахувати наперед. Але є мінус: на тиші витрачається стільки ж бітів, скільки на барабанному соло.

VBR — змінний бітрейт. Складним місцям дається більше бітів, простим менше.

Це як пакувати валізу: важким речам більше місця, шкарпеткам менше. За того самого розміру якість вища.

Мінус теж є: точний розмір наперед не порахуєш.

Питання

Трек триває рівно 3 хвилини і важить 3 МБ. Який у нього приблизно бітрейт і чи почуєш ти різницю з тим самим треком у 320?

Питання

Друг скачав MP3 128, перегнав його у FLAC і радіє: файл виріс утричі, отже якість виросла. Що з цим не так?

Крок 7

Перші кроки у власному терміналі

Ці команди набираються на твоєму комп'ютері, а не на сервері

Не по SSH На VPS немає ffmpeg для учнів, і це не помилка адміністратора. Двадцять машин, які одночасно кодують звук на одному сервері, кладуть його. Відкрий PowerShell або Terminal у себе і перейди в media/lesson-03/.

Перше, що робить клас, — перевіряє, чи стоїть потрібна програма. Не знайдено команду — далі йти немає сенсу.

твій термінал
$ ffmpeg -version ffmpeg version 7.1 Copyright (c) 2000-2024 the FFmpeg developers

Що таке ffprobe

Ти встановив дві програми з майже однаковими іменами. Вони роблять різні речі.

ffmpeg — це майстер. Він перероблює файл: міняє формат, ріже, склеює.

ffprobe — це лікар із ліхтариком. Він тільки дивиться й розповідає, що всередині.

Він не міняє нічого. Тому запускати його можна скільки завгодно й нічого не зіпсуєш.

подивитися все про файл
$ ffprobe -v quiet -print_format json -show_format -show_streams source.wav
Частина командиЩо робить
-v quietприбирає службові повідомлення, лишає тільки відповідь
-print_format jsonвивід у JSON — його читає і людина, і jq, і чекер
-show_formatдані про файл загалом: контейнер, тривалість, розмір
-show_streamsдані про кожну доріжку окремо: частота, канали, кодек
source.wavвласне файл; він має лежати в поточній теці

Читаємо вивід

відповідь ffprobe (скорочено)
{ "streams": [ { "codec_name": "pcm_s16le", "codec_type": "audio", "sample_rate": "44100", "channels": 2, "channel_layout": "stereo", "bits_per_sample": 16, "duration": "15.000000", "bit_rate": "1411200" } ], "format": { "filename": "source.wav", "format_name": "wav", "duration": "15.000000", "size": "2646044", "bit_rate": "1411223" } }
ПолеЗначення тутЩо це означає
codec_namepcm_s16leсирий PCM, знакові 16-бітні числа, порядок байтів little-endian — тобто жодного стиснення
sample_rate44100частота дискретизації: 44 100 вимірів на секунду
channels2стерео; множник «канали» у нашій формулі
bits_per_sample16розрядність: 65 536 рівнів на кожен вимір
duration15.000000тривалість у секундах; саме її звіряє автоперевірка
size2646044реальний розмір файлу в байтах, разом із заголовком
bit_rate141120044100 × 16 × 2 — те саме число, що дає формула
format_namewavконтейнер; розширення файлу тут ні до чого

Перевір себе просто зараз: 44 100 × 16 × 2 × 15 ÷ 8 = 2 646 000 байтів. У полі size стоїть 2 646 044 — рівно на 44 байти більше. Це заголовок WAV. Формула працює.

Зберігаємо вивід у файл

Сам звук на сервер не поїде — його там відхилять. А от опис поїде.

Цей опис текстовий і важить кілька кілобайтів. Такий файл приймальня пропустить.

зняти паспорт джерела
$ ffprobe -v quiet -print_format json -show_format source.wav > probe-source.json
Пастка Windows PowerShell У PowerShell 5.1 знак > зберігає файл у кодуванні UTF-16, і чекер потім не може розібрати JSON. Якщо check 03 каже «невалідний JSON», перезніми так: ffprobe … | Out-File -Encoding utf8 probe-source.json.

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

зробити MP3 320 кбіт/с
$ ffmpeg -i source.wav -b:a 320k out-320.mp3 size= 588kB time=00:00:15.02 bitrate= 320.7kbits/s

-i — вхідний файл, -b:a 320k — бажаний бітрейт аудіодоріжки, останній аргумент — куди писати. Формат ffmpeg визначає за розширенням. Послухай обидва файли в навушниках і чесно скажи собі, чи чуєш різницю.

Питання

У тебе в теці media/lesson-03/ лежать source.wav, out-320.mp3 і probe-source.json. Що з цього їде по FTP у ~/www/lesson-03/?

Крок 8

Практика: від джерела до звіту

Кроки 1—8 робиш у себе на комп'ютері, кроки 9—10 — на сервері. Галочки зберігаються, сторінку можна закрити.

Що нікуди не завантажується source.wav і out-320.mp3 лишаються в локальній теці media/lesson-03/. FTP-приймальня відхиляє .wav, .mp3 і будь-що більше за 2 МБ — це технічне обмеження, а не побажання.
Крок 9

Автоперевірка

Чекер зайде у твій кабінет і звірить звіт сам із собою. Спроби не обмежені.

Демонстраційний режим: результат згенеровано для показу. На сервері ця кнопка викликає POST /api/check, який запускає check 03 від імені учня.

Що вчитель дивиться на екрані

Крок 10

Шкала виконання

Це те, що бачить учитель, коли виставляє оцінку.

СкладникВагаРезультат
Виконано
0%
Рекомендований бал за 12-бальною

Три речення, які варто запам'ятати

Де найчастіше помиляються

Домашнє завдання

Порахуй у зошиті розмір нестисненого аудіо тривалістю 3 хвилини для трьох наборів параметрів:

  1. 8 кГц / 8 біт / моно;
  2. 44,1 кГц / 16 біт / стерео;
  3. 48 кГц / 24 біти / стерео.

Спершу порахуй на папері. Біля кожного кроку підпиши одиницю: герци, біти, секунди, байти.

Лише потім звір відповідь із калькулятором вище. І приготуйся пояснити, чому третій набір важчий за другий саме в стільки разів.

Джерела

Звідки взяті числа

Усі значення на цій сторінці — з відкритих стандартів і документації. Перевіряти дозволено й корисно.

Повний список із поясненнями — у файлі urok-05-джерела.md поруч із цією сторінкою.