Модуль I · IT Skills (Hardware & Multimedia) · тема 3, урок 1 з 2 · 120 хвилин
Пісня на телефоні — це файл. А з чого він складається?
Сьогодні розберемо, як коливання повітря перетворюється на числа. І навчимося рахувати розмір такого файлу наперед.
ffprobe, з якою частотою записано твій файл;Слова дискретизація, розрядність і бітрейт поки нічого не означають. Розберемо їх по черзі.
| Етап | Хв | Що робимо |
|---|---|---|
| Перевірка інструментів | 10 | ffmpeg -version у кожного; кому не знайшло — ставимо разом |
| Хвиля → семпли | 20 | Дискретизація, Найквіст, чому 44,1 кГц |
| Розрядність і формула | 25 | 8 / 16 / 24 біти, живий калькулятор |
| Перерва | 10 | — |
| З втратами чи без | 20 | WAV, FLAC, MP3, AAC, Opus; CBR і VBR |
| Свій термінал | 25 | ffprobe, перший 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/.
Не шукай lesson-05: її немає.Перш ніж рахувати байти, домовмося, що саме ми оцифровуємо
Кинь камінь у воду. По поверхні підуть кола. Приблизно так само поводиться повітря, коли звучить струна чи динамік.
Динамік штовхає повітря туди-сюди. Тиск біля твого вуха то зростає, то падає. Ця зміна тиску і є звук.
У хвилі два головні параметри. Перший — частота: скільки повних коливань за секунду. Міряють її в герцах, Гц.
Що вища частота, то вищий тон. Писк — це багато коливань, бас — мало.
Другий параметр — амплітуда: наскільки сильно змінюється тиск. Більша амплітуда — гучніше.
Вухо людини чує приблизно від 20 Гц до 20 000 Гц. Нижня межа тримається все життя.
А от верхня з віком опускається. У 8 класі це часто 18—19 кГц. У сорокарічної людини — уже близько 14—15 кГц.
Це нормальне вікове явище, а не зіпсований слух.
Найважливіше для нас число тут — 20 кГц. Саме верхня межа слуху визначатиме, скільки разів на секунду треба міряти сигнал. Усе решта уроку виростає з неї.
Ти чуєш тонкий писк від старого телевізора, а дідусь у тій самій кімнаті каже, що жодного писку немає. Хто помиляється?
Комп'ютер не вміє зберігати криву. Він уміє зберігати список чисел
Мікрофон перетворює коливання тиску на коливання напруги. Це поки що аналоговий сигнал — безперервна крива без жодних чисел.
Далі за роботу береться окрема мікросхема. Її звуть АЦП — аналого-цифровий перетворювач.
Уяви, що ти щосекунди фотографуєш стрілку годинника. Кадри окремі, а рух по них видно.
АЦП робить те саме з напругою. Тисячі разів на секунду він міряє її й записує результат числом.
Одне таке вимірювання зветься семпл. Англійське sample означає «зразок», «проба».
На це питання є точна відповідь. Її дає теорема Котельникова — Найквіста.
На пальцях правило таке. На кожне коливання хвилі має припасти більше ніж дві точки.
Менше двох — і хвилю не відновити. Комп'ютер побачить зовсім іншу криву.
Тепер порахуємо. Вухо чує до 20 кГц. Множимо на два: виходить 40 000 Гц.
Менше за це число — і верхні звуки зникнуть. Набагато більше — зайві байти без жодного виграшу для вуха.
Ти пишеш скрипку, у якої є обертони до 18 кГц, і виставив частоту дискретизації 30 кГц замість 44,1. Що станеться зі звуком?
| Частота | Де застосовують | Які частоти передає |
|---|---|---|
| 8 000 Гц | класична телефонія, кодек G.711 | до ≈3,4 кГц: слова розбірливі, музика звучить бляшано |
| 16 000 Гц | голосові асистенти, «широкосмугова» мова | до ≈7 кГц: голос уже природний |
| 44 100 Гц | компакт-диск, MP3, більшість музики | до ≈20 кГц: увесь чутний діапазон |
| 48 000 Гц | відео, кіно, професійна апаратура | до ≈22 кГц; зручно ділиться на кадрову частоту |
| 96 000 Гц | студійний запис і зведення | запас на обробку, а не для вуха |
Число 44 100 виглядає випадковим. Насправді воно з історії.
Наприкінці 1970-х цифрового магнітофона ще не існувало. А записувати цифровий звук уже хотілося.
Тоді придумали хитрість: писати на звичайну відеокасету. Спеціальна приставка перетворювала семпли на подобу телевізійного сигналу.
У телекадрі рядків фіксована кількість. У кожен рядок клали три семпли.
Для американського стандарту виходило 3 × 245 × 60 = 44 100. Для європейського — 3 × 294 × 50 = теж 44 100.
Одне число підійшло обом системам. І воно було більшим за потрібні 40 000 Гц.
Так 44 100 Гц потрапило до стандарту компакт-диска (Red Book, 1980). І залишилося з нами дотепер — уже без жодних відеокасет.
Однокласник каже: «44,1 кГц узяли, бо саме ця частота найприємніша для вуха». Що насправді стоїть за цим числом?
Частота каже, як часто міряти. Розрядність — якою лінійкою, канали — скільки доріжок
Уяви лінійку без дрібних поділок — тільки сантиметри. Зріст 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 не трапляється. Він живе тільки всередині програм монтажу.
Де малу розрядність чути найкраще? У тихих місцях.
Гучний звук використовує всі рівні лінійки. А тихому дістається лише кілька останніх.
Тому затухання останнього акорду перетворюється на зернисте шипіння.
Ти записав голос на диктофон і в паузах між фразами чути неприємну «зернистість». Файл: 44,1 кГц, 8 біт, моно. Що змінити насамперед?
З розрядністю розібралися. Лишився останній множник формули — кількість каналів. Тут усе просто.
Моно — один потік чисел. Стерео — два незалежні: окремо лівий, окремо правий. Формат 5.1 — аж шість.
Кожен канал зберігається цілком. Тому стерео важить рівно вдвічі більше за моно.
Для запису голосу моно цілком достатньо і економить половину розміру. Для музики стерео потрібне: без нього зникає розташування інструментів у просторі.
Три множники — і розмір нестисненого аудіо відомий наперед
Нестиснене аудіо (WAV, AIFF) — це просто всі семпли підряд. Тому його розмір рахується точно, без жодних «приблизно»:
Розберемо формулу по кроках. Інакше це просто заклинання.
Частота × канали. Скільки семплів народжується за секунду.
× розрядність. Скільки це бітів за секунду. Саме це число і звуть бітрейтом.
÷ 8. Переходимо від бітів до байтів.
× секунди. Набігає повний розмір файлу.
Для компакт-диска: 44 100 × 16 × 2 = 1 411 200 біт/с, тобто 1411,2 кбіт/с. Це 176 400 байтів щосекунди, або приблизно 10,6 МБ на кожну хвилину музики.
Хвилина — 60 с, три хвилини — 180 с, година — 3600 с. Спершу порахуй у зошиті, потім звіряй тут.
Диктофон пише лекцію в WAV: 48 кГц, 24 біти, стерео. Учитель говорить годину. Скільки приблизно займе файл?
Три різні відповіді на питання «як зменшити ці мегабайти»
Хвилина музики важить 10 МБ. Це багато. Зменшити її можна трьома різними способами.
Перший спосіб: не зменшувати взагалі. Так роблять WAV і AIFF — зберігають усі семпли як є.
Розмір величезний, зате чесність повна. У такому форматі працюють на монтажі, а не носять у телефоні.
Другий спосіб: стиснути без втрат. Це FLAC і ALAC.
Уяви ковдру, згорнуту в рулон. Місця займає менше, а сама ковдра ціла. Розгорнув — усе на місці.
Так само й тут. Розпакований файл збігається з оригіналом біт у біт.
Стискає FLAC помірно: готовий файл важить 50—60% від WAV. Тобто меншає приблизно вдвічі, а не вдесятеро.
Третій спосіб: викинути зайве назавжди. Це MP3, AAC і Opus.
Викидають не навмання. Спеціальна програма рахує, чого вухо все одно не почує. Ці розрахунки звуть психоакустичною моделлю.
Головний прийом зветься маскування. Поруч із гучним звуком тихий не чути взагалі — його й не зберігають.
Це як розмова біля працюючої дрилі. Слова є, а розібрати їх неможливо.
Другий прийом — зрізати найвищі частоти. На 128 кбіт/с MP3 часто обрізає все вище 16 кГц.
Для стисненого файлу рахувати ще простіше. Множники тут лише два: бітрейт × секунди ÷ 8.
Порахуємо MP3 на 320 кбіт/с тривалістю 180 секунд. 320 000 × 180 ÷ 8 = 7 200 000 байтів.
Тобто 7,2 МБ. Проти 31,8 МБ у WAV.
| Формат | Тип | Коли доречний |
|---|---|---|
| WAV | без стиснення | джерело для монтажу, вимір, здача практичних робіт |
| FLAC | без втрат | домашній архів музики, коли диск дозволяє |
| MP3 | з втратами | сумісність із чим завгодно: старі плеєри, магнітоли |
| AAC | з втратами | та сама якість за меншого бітрейта; відео, стримінг |
| Opus | з втратами | голос і низькі бітрейти: дзвінки, Discord, вебстріми |
Бітрейт можна тримати сталим, а можна міняти по ходу треку. Звідси дві абревіатури.
CBR — сталий бітрейт. Кожна секунда важить однаково.
Розмір такого файлу легко порахувати наперед. Але є мінус: на тиші витрачається стільки ж бітів, скільки на барабанному соло.
VBR — змінний бітрейт. Складним місцям дається більше бітів, простим менше.
Це як пакувати валізу: важким речам більше місця, шкарпеткам менше. За того самого розміру якість вища.
Мінус теж є: точний розмір наперед не порахуєш.
Трек триває рівно 3 хвилини і важить 3 МБ. Який у нього приблизно бітрейт і чи почуєш ти різницю з тим самим треком у 320?
Друг скачав MP3 128, перегнав його у FLAC і радіє: файл виріс утричі, отже якість виросла. Що з цим не так?
Ці команди набираються на твоєму комп'ютері, а не на сервері
ffmpeg для учнів, і це не помилка адміністратора.
Двадцять машин, які одночасно кодують звук на одному сервері, кладуть його.
Відкрий PowerShell або Terminal у себе і перейди в
media/lesson-03/.Перше, що робить клас, — перевіряє, чи стоїть потрібна програма. Не знайдено команду — далі йти немає сенсу.
ffprobeТи встановив дві програми з майже однаковими іменами. Вони роблять різні речі.
ffmpeg — це майстер. Він перероблює файл: міняє формат,
ріже, склеює.
ffprobe — це лікар із ліхтариком. Він тільки дивиться
й розповідає, що всередині.
Він не міняє нічого. Тому запускати його можна скільки завгодно й нічого не зіпсуєш.
| Частина команди | Що робить |
|---|---|
-v quiet | прибирає службові повідомлення, лишає тільки відповідь |
-print_format json | вивід у JSON — його читає і людина, і jq, і чекер |
-show_format | дані про файл загалом: контейнер, тривалість, розмір |
-show_streams | дані про кожну доріжку окремо: частота, канали, кодек |
source.wav | власне файл; він має лежати в поточній теці |
| Поле | Значення тут | Що це означає |
|---|---|---|
codec_name | pcm_s16le | сирий PCM, знакові 16-бітні числа, порядок байтів little-endian — тобто жодного стиснення |
sample_rate | 44100 | частота дискретизації: 44 100 вимірів на секунду |
channels | 2 | стерео; множник «канали» у нашій формулі |
bits_per_sample | 16 | розрядність: 65 536 рівнів на кожен вимір |
duration | 15.000000 | тривалість у секундах; саме її звіряє автоперевірка |
size | 2646044 | реальний розмір файлу в байтах, разом із заголовком |
bit_rate | 1411200 | 44100 × 16 × 2 — те саме число, що дає формула |
format_name | wav | контейнер; розширення файлу тут ні до чого |
Перевір себе просто зараз: 44 100 × 16 × 2 × 15 ÷ 8 = 2 646 000 байтів.
У полі size стоїть 2 646 044 — рівно на 44 байти більше.
Це заголовок WAV. Формула працює.
Сам звук на сервер не поїде — його там відхилять. А от опис поїде.
Цей опис текстовий і важить кілька кілобайтів. Такий файл приймальня пропустить.
> зберігає файл у кодуванні UTF-16, і
чекер потім не може розібрати JSON. Якщо check 03 каже
«невалідний JSON», перезніми так:
ffprobe … | Out-File -Encoding utf8 probe-source.json.-i — вхідний файл, -b:a 320k — бажаний бітрейт
аудіодоріжки, останній аргумент — куди писати. Формат ffmpeg
визначає за розширенням. Послухай обидва файли в навушниках і чесно скажи собі,
чи чуєш різницю.
У тебе в теці media/lesson-03/ лежать source.wav,
out-320.mp3 і probe-source.json. Що з цього
їде по FTP у ~/www/lesson-03/?
Кроки 1—8 робиш у себе на комп'ютері, кроки 9—10 — на сервері. Галочки зберігаються, сторінку можна закрити.
source.wav і out-320.mp3 лишаються в локальній теці
media/lesson-03/. FTP-приймальня відхиляє .wav,
.mp3 і будь-що більше за 2 МБ — це технічне обмеження, а не
побажання.Чекер зайде у твій кабінет і звірить звіт сам із собою. Спроби не обмежені.
Демонстраційний режим: результат згенеровано для показу. На сервері
ця кнопка викликає POST /api/check, який запускає
check 03 від імені учня.
media/lesson-03/, у ній справді
лежать source.wav і out-320.mp3;ffmpeg запускався саме тут,
а не в SSH-сесії;id="calc".Це те, що бачить учитель, коли виставляє оцінку.
| Складник | Вага | Результат |
|---|
ffmpeg там;> і отримують UTF-16.Порахуй у зошиті розмір нестисненого аудіо тривалістю 3 хвилини для трьох наборів параметрів:
Спершу порахуй на папері. Біля кожного кроку підпиши одиницю: герци, біти, секунди, байти.
Лише потім звір відповідь із калькулятором вище. І приготуйся пояснити, чому третій набір важчий за другий саме в стільки разів.
Усі значення на цій сторінці — з відкритих стандартів і документації. Перевіряти дозволено й корисно.
ffprobe — усі ключі виводу.
ffmpeg.org/ffprobe.htmlПовний список із поясненнями — у файлі
urok-05-джерела.md поруч із цією сторінкою.