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

Аудіолабораторія: одне джерело — чотири формати

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

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

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

На минулому уроці ти порахував, скільки важить нестиснений звук. І зробив один файл out-320.mp3.

Сьогодні з того самого source.wav народиться чотири різні файли.

Ти послухаєш їх у навушниках. І сам почуєш, де проходить межа між «однаково» і «гірше».

Головне: свій вибір ти доведеш не словами, а числами. Числа підуть у файл report.csv.

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

Головне правило теми: важке рахується вдома Усі команди ffmpeg ти набираєш у своєму терміналі, у локальній теці media/lesson-03/. Аудіофайли залишаються на твоєму комп’ютері назавжди. По FTP на сервер їде лише текст: report.csv, cmd.txt і index.html. Самі файли вчитель слухає очно, у навушниках, за твоїм екраном.

Хід уроку

ЕтапХвЩо робимо
Перевірка ДЗ10Розбір трьох розрахунків розміру
Демо: 4 конвертації15Команди й розбір кожного ключа
Практика 125Робиш чотири файли локально й слухаєш кожен
Перерва10
Практика 225ffprobe → п’ять рядків report.csv
Практика 315Сторінка, висновок, вивантаження по FTP
Очна здача15Слухаємо 320 і 64, звіряємо числа з екраном
Підсумок і ДЗ5Дерево рішень «який формат обрати»
Разом120
Що ти здаєш report.csv — заголовок і рівно 5 рядків даних; cmd.txt — чотири команди ffmpeg, які ти справді виконав; index.html — таблиця, побудована з CSV, і блок id="conclusion" щонайменше на 150 символів власного тексту.
Чому тека зветься lesson-03, а урок — шостий Теки практики звуться за темою, а не за номером уроку. Тема 3 — це уроки 5 і 6, і обидва складають роботу в одну теку lesson-03/. Не шукай lesson-06: її немає.
Крок 2

Що відбувається всередині кодека

Де саме в ланцюжку зникає звук — і чому назад його не повернути

Слово кодек склеїли з двох: «кодер» і «декодер».

Кодер пакує звук у компактний потік бітів. Декодер розпаковує його назад у звук. Один пакує валізу, другий розбирає.

MP3, FLAC, AAC, Opus — це все такі пари. Просто правила пакування в них різні.

Тепер найважливіше. Уся різниця між форматами народжується в одному місці — у кодері.

Далі не губиться нічого. Файл копіюється байт у байт. Декодер працює однаково чесно для будь-якої якості.

джерело кодер файл декодер звук source.wav out-128.mp3 плеєр навушники libmp3lame тільки тут губиться інформація і повернути її вже неможливо тут утрат немає: копіювання і декодування чесні одне джерело → різні кодери → різні файли; джерело завжди одне й те саме
Тому в усіх чотирьох командах вхід один і той самий — -i source.wav. Якщо кодувати MP3 з MP3, втрати накладаються вдруге, а тривалість і розмір при цьому виглядають нормально.

Три способи зменшити файл

Нагадаємо коротко, що вже знаємо. Способів три, і різняться вони однією річчю: чи повернеться оригінал.

СпосібЩо робитьЧи повернеться оригінал
Нічого не робити
WAV
усі семпли лежать як євін і не зникав
Стиснути без втрат
FLAC, ALAC
передбачувані ділянки записує коротше, як архіватортак, біт у біт
Стиснути з втратами
MP3, AAC, Opus
частину сигналу викидає назавжди за психоакустичною моделлюніколи
Питання

Ти зробив out-64.mp3, випадково видалив source.wav, а потім із того out-64.mp3 зробив новий WAV. Файл знову важить 2,6 МБ — рівно як оригінал. Що ти насправді отримав?

Крок 3

Бітрейт: скільки бітів на секунду звуку

Одна цифра, яка керує і розміром, і якістю

Бітрейт — це скільки бітів кодек витрачає на одну секунду звуку.

Уяви, що ти переказуєш фільм другові. Можна за годину, а можна за хвилину. За хвилину — теж зрозуміло, але подробиці зникнуть.

У WAV бітрейт не налаштовується. Він випливає з формули сам.

Рахуємо: 44 100 × 16 × 2 = 1 411 200 біт/с. Це і є 1411 кбіт/с.

А от у MP3 бітрейт задаєш ти сам. Для цього є ключ -b:a.

Задати можна не будь-що. Стандарт поставив стелю 320 кбіт/с і підлогу 32 кбіт/с.

Просити «MP3 500k» немає сенсу. Кодер мовчки віддасть ті самі 320.

Реальні бітрейти й що вони означають

кбіт/с3-хв трекДе це трапляється насправді
141131,8 МБWAV із компакт-диска — не бітрейт, а наслідок формули
3207,2 МБмаксимум MP3; те, що продають як «HQ»
1924,3 МБрозумний компроміс; більшість людей далі різниці не чує
1282,9 МБ«стандарт нульових»: файли з CD-дисків, старі збірки
641,4 МБподкаст, лекція, голос; на музиці артефакти вже помітні
320,7 МБнижня межа MP3; розбірлива мова і майже нічого більше

Числа в колонці «3-хв трек» ніхто не вигадував. Це та сама формула з минулого уроку: бітрейт × секунди ÷ 8.

Перевіримо на 192 кбіт/с. Множимо: 192 000 × 180 ÷ 8 = 4 320 000 байтів. У таблиці стоїть 4,3 МБ. Сходиться.

Той самий трек у чотирьох форматах

Наш source.wav — це 15 секунд, 44,1 кГц, 16 біт, стерео.

Ось що з нього вийде. Ці п’ять чисел ти сьогодні побачиш на своєму екрані.

source.wav out.flac out-320.mp3 out-128.mp3 out-64.mp3 2,65 МБ 1,46 МБ 0,60 МБ 0,24 МБ 0,12 МБ 15 секунд, 44,1 кГц / 16 біт / стерео — одне джерело, чотири кодування
FLAC — приблизно 55% від WAV: точний відсоток залежить від музики, тиха класика тиснеться краще за щільний метал. Розміри трьох MP3 відносяться точно як 320 : 128 : 64, бо бітрейт сталий, а тривалість спільна.
Питання

Один альбом є у двох форматах. У FLAC трек важить 25 МБ, у MP3 320 — 7 МБ. Ти слухаєш у навушниках за 300 грн, дорогою в маршрутці. Що кладеш у телефон і чому?

CBR і VBR: сталий бітрейт проти розумного

Бітрейт можна тримати однаковим весь трек. А можна міняти по ходу.

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

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

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

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

Мінус один: точний розмір наперед не порахуєш. Він залежить від самої музики.

VBR у ffmpeg: якість замість бітрейта
$ ffmpeg -y -i source.wav -c:a libmp3lame -q:a 2 out-vbr.mp3 # -q:a 0 — найкраще (~245 кбіт/с у середньому) # -q:a 2 — типовий вибір (~190 кбіт/с) # -q:a 5 — економний (~130 кбіт/с)
У звіт VBR не йде report.csv має містити рівно п’ять рядків даних: source.wav і чотири файли з практики. Якщо зробиш out-vbr.mp3 для себе — чудово, але в CSV його не додавай, інакше автоперевірка завалить перший же критерій.
Питання

Ти заливаєш збірку на флешку рівно на 1 ГБ. Треба знати наперед, що влізуть усі треки до останнього. CBR чи VBR?

Крок 4

Що саме кодек викидає першим

Спочатку — верхні частоти, потім — тихе поруч із гучним

MP3 не псує звук рівномірно. Він викидає не будь-що, а за списком правил.

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

Два прийоми з нього ти почуєш уже сьогодні.

Перший прийом — зріз верхніх частот. Кодер відрізає все вище певної межі.

Нагорі мало енергії, а бітів вона з’їдає багато. Що нижчий бітрейт, то нижче опускається ця стеля.

05 1015 20 кГц гучність це MP3 128 викинув повністю стеля 16 кГц оригінал WAV те, що лишилося в MP3 128
Саме через це на спектрограмі MP3 видно рівний горизонтальний «зріз», якого в оригіналі не було. Це не збій кодера і не помилка ffmpeg — це його штатна поведінка.

Де стоїть стеля на різних бітрейтах

Точні значення залежать від версії кодера, але порядок такий:

людина MP3 320 MP3 192 MP3 128 MP3 64 20 20,5 19 16 ≈11 05 1015 20 кГц
Зелена смуга — верхня межа слуху молодої людини. На 320 кодек лишає навіть трохи більше, ніж ти чуєш, тому «зрізу» там і не чути. На 64 зникає п’ята частина всього діапазону — і оце вже чути одразу.
Питання

Ти зробив спектрограми out-320.mp3 і out-128.mp3. У другій усе вище приблизно 16 кГц — рівна порожня смуга. Однокласник каже: «у тебе ffmpeg зламався». Що ти відповіси?

Другий прийом: маскування

Сусід увімкнув дриль — і шепіт поруч ти вже не розчуєш. Шепіт нікуди не подівся. Просто гучне його перекрило.

У звуці так само. Гучна нота глушить тиху, що звучить поруч. Це й зветься маскуванням.

Кодек рахує цей поріг. Замаскований тихий звук він не зберігає взагалі — жодного біта на нього.

На 320 кбіт/с бітів вистачає. Тому викидається тільки те, чого й так не чути.

На 64 бітів катастрофічно бракує. Модель починає різати вже й потрібне. Ось звідки беруться артефакти.

АртефактНа що схожеДе чутно найшвидше
Pre-echo
«передлуння»
перед різким ударом чути короткий шурхіт, якого в оригіналі немаєкастаньєти, клацання, старт барабана
Swirlies
«плюскіт»
тарілки й шипіння «пливуть», ніби під водоюхай-хет, оплески, шум дощу
Глухістьзвук ніби накрили ковдрою, зникло «повітря»скрипки, вокальні «с» і «ш»
Розвал стереокартинка звужується до центруширокі мікси, живі записи
Як слухати на очній здачі Не слухай пісню цілком. Знайди 3—4 секунди з тарілками або оплесками й перемкни між 320 і 64 кілька разів поспіль. Різницю чутно саме на переходах, а не на суцільному вокалі.
Питання

Однокласник упевнений: «на 64 всі нормально, я нічого не чую». Ти вмикаєш йому фрагмент із тарілками — і він одразу чує. Чому саме тарілки видають низький бітрейт?

Крок 5

FLAC: менший за WAV, але нічого не втратив

Чому «менший» і «гірший» — це не одне й те саме

Уяви список: 10, 11, 12, 13, 14. Замість п’яти чисел можна написати «від 10 до 14». Коротше — а відновлюється точно.

FLAC робить те саме зі звуком. Він дивиться на сусідні семпли й бачить, що ті змінюються передбачувано.

Тоді він пише не самі числа, а короткий опис, як їх відновити. Так само стискає файли будь-який архіватор, той самий ZIP.

Розпакований FLAC збігається з оригіналом біт у біт. Це можна перевірити хешем.

Виграш скромний саме тому, що чесний. Типово це 50—60% від розміру WAV.

Тиха класика тиснеться до 45%, щільний метал ледве до 70%. Бітрейт FLAC ти не задаєш — він виходить сам із музики.

WAVFLACMP3 320
Типбез стисненнябез втратз втратами
15 с у нас2,65 МБ≈1,46 МБ0,60 МБ
Оригінал повертаєтьсявін і є оригіналтак, біт у бітні, ніколи
Бітрейт1411, фіксований формулою≈700—900, як вийде320, ти задав
Читає магнітоларідкомайже ніколизавжди

Дерево рішень: який формат брати

Перейменування — це не конвертація Якщо взяти out-128.mp3 і назвати його out.flac, усередині залишиться MP3. ffprobe покаже codec_name: mp3 за секунду, і на очній здачі це одразу видно. Такий FLAC — незалік.
Питання

У твоєму звіті: WAV 2,65 МБ, FLAC 1,46 МБ, MP3 320 — 0,60 МБ. Друг каже: «FLAC посередині за розміром — отже, і за якістю посередній». Де він помиляється?

Крок 6

Чотири команди, які роблять чотири файли

Набираються у твоєму терміналі, у теці media/lesson-03/

Не по SSH На сервері ffmpeg для учнів немає, і це не помилка адміністратора: двадцять машин, які одночасно кодують звук, кладуть VPS. Відкрий PowerShell або Terminal у себе й перейди в теку з минулого уроку.
крок нуль: інструмент і тека
$ ffmpeg -version $ cd media/lesson-03 ffmpeg version 7.1 Copyright (c) 2000-2024 the FFmpeg developers

Чотири конвертації

Зверни увагу: у кожній команді вхід один і той самий. Ніяких ланцюжків «з попереднього файлу» — інакше втрати накладуться вдруге.

чотири файли з одного джерела
$ ffmpeg -y -i source.wav -c:a libmp3lame -b:a 320k out-320.mp3 $ ffmpeg -y -i source.wav -c:a libmp3lame -b:a 128k out-128.mp3 $ ffmpeg -y -i source.wav -c:a libmp3lame -b:a 64k out-64.mp3 $ ffmpeg -y -i source.wav -c:a flac out.flac

Розбір кожного ключа

КлючЩо робитьЩо буде без нього
-yдозволяє перезаписати вихідний файл без питаньffmpeg зупиниться й чекатиме, поки ти натиснеш y
-i source.wavвхідний файл; усе, що після -i, — джерелоffmpeg не знає, що кодувати, і лається
-c:a libmp3lameкодек аудіодоріжки: c — codec, :a — audioffmpeg обере кодек сам за розширенням; для .mp3 це той самий libmp3lame, але краще писати явно
-b:a 320kбітрейт аудіодоріжки, 320 000 біт/сдля MP3 ffmpeg візьме свій типовий бітрейт, і твій звіт розсиплеться
-c:a flacкодек без втрат; бітрейт тут не задають узагалі
out-320.mp3останній аргумент завжди вихідний файл
Чому :a У файлі може бути кілька доріжок: відео, аудіо, субтитри. Двокрапка з літерою каже, до якої саме доріжки стосується ключ. -b:v — бітрейт відео, -b:a — бітрейт аудіо. У чистому звуковому файлі доріжка одна, але звичку писати :a варто мати одразу.

Ще два ключі, які знадобляться

Бітрейт — не єдиний спосіб зменшити файл. Є ще два.

Можна рідше вимірювати звук. І можна лишити один канал замість двох.

Для голосу це нормально. Для музики — ні.

голос для сайту: моно, 22 кГц, 64 кбіт/с
$ ffmpeg -y -i source.wav -c:a libmp3lame -b:a 64k -ar 22050 -ac 1 voice.mp3
КлючРозшифровкаЩо робить
-ar 22050audio rateчастота дискретизації на виході: 22 050 вимірів на секунду замість 44 100. За теоремою відліків це стеля 11 кГц — для мови вистачає
-ac 1audio channelsкількість каналів: 1 — моно, 2 — стерео. Для лекції другий канал не несе інформації, а бітів забирає
Файл voice.mp3 у звіт не йде Це демонстрація ключів -ar і -ac, а не п’ятий рядок CSV. У report.csv — тільки source.wav і чотири файли з практики.

Для рівня «+»: побачити зріз своїми очима

спектрограма у PNG
$ ffmpeg -y -i out-128.mp3 -lavfi showspectrumpic=s=1024x512:legend=1 spec-128.png $ ffmpeg -y -i out-320.mp3 -lavfi showspectrumpic=s=1024x512:legend=1 spec-320.png

-lavfi вмикає фільтр. s=1024x512 — розмір картинки. legend=1 домальовує підписані осі.

Тепер порівняй два PNG. У spec-128.png угорі буде чорна смуга. У spec-320.png її немає.

PNG — це картинка, а не аудіо. Тому на сервер його класти можна, якщо він менший за 2 МБ.

Питання

Ти поспішав. І зробив out-128.mp3 не з source.wav, а з готового out-320.mp3. Тривалість збіглася, розмір теж нормальний, автоперевірка мовчить. Що з цим не так?

Крок 7

Збираємо report.csv

Це головне, що ти сьогодні здаєш. Текстовий файл на п’ять рядків

CSV — це таблиця, записана текстом. Значення в рядку розділені комою.

Перший рядок називає колонки. Кожен наступний описує один файл.

Такий файл читає і людина, і Excel, і чекер. Заголовок має бути точно таким:

заголовок report.csv — скопіюй буква в букву
file,format,bitrate_kbps,size_bytes,duration_s

Звідки беруться числа

Не з голови й не з провідника Windows. Числа дає ffprobe.

Він віддає рівно ті три поля, що потрібні. І одразу через кому:

три числа про один файл
$ ffprobe -v error -show_entries format=duration,size,bit_rate -of csv=p=0 out-320.mp3 15.023347,600480,319788
Частина командиЩо робить
-v errorпоказувати лише справжні помилки; службовий шум зникає
-show_entries format=…вивести не весь паспорт файлу, а перелічені поля секції format
duration,size,bit_rateтривалість у секундах, розмір у байтах, бітрейт у бітах за секунду
-of csv=p=0вивід у CSV; p=0 прибирає назву секції на початку рядка
Дві пастки в цьому виводі bit_rate приходить у бітах: 319 788 — це 320 кбіт/с, тобто ділиш на 1000 і округлюєш. А duration у MP3 буває на кілька мілісекунд довшою за WAV: кодер додає технічну тишу на початку й у кінці. Автоперевірка це знає й дає допуск ±0,3 с.

Одним заходом по всіх п’яти файлах

macOS / Linux / Git Bash
$ for f in source.wav out.flac out-320.mp3 out-128.mp3 out-64.mp3; do ffprobe -v error -show_entries format=duration,size,bit_rate -of csv=p=0 "$f"; done
Windows PowerShell
$ foreach ($f in "source.wav","out.flac","out-320.mp3","out-128.mp3","out-64.mp3") { ffprobe -v error -show_entries format=duration,size,bit_rate -of csv=p=0 $f }

Ім’я файлу команда не друкує. Вона йде по списку в тому порядку, у якому ти файли перелічив.

Тому й записуй результати в тому самому порядку, зверху вниз.

Точний розмір, якщо треба перевірити себе

розмір у байтах, без округлень
# macOS / Linux $ stat -c %s out-64.mp3 # Windows PowerShell $ (Get-Item out-64.mp3).Length

Готовий звіт

Ось як має виглядати твій файл. Числа будуть свої — але схожі, бо джерело в усіх однакове.

report.csv (приклад справжніх чисел)
file,format,bitrate_kbps,size_bytes,duration_s source.wav,wav,1411,2646044,15.000 out.flac,flac,776,1455102,15.000 out-320.mp3,mp3,320,600480,15.023 out-128.mp3,mp3,128,240252,15.023 out-64.mp3,mp3,64,120168,15.023

Перевір себе тими самими діями, що й чекер. Розмір має сходитися з формулою бітрейт × тривалість ÷ 8.

Рахуємо: 128 000 × 15,023 ÷ 8 = 240 368 байтів. У файлі стоїть 240 252.

Різниця менша за відсоток. Це теги й вирівнювання кадрів.

Порядок розмірів має бути строго спадним: WAV > FLAC > 320 > 128 > 64.

Раптом FLAC у звіті менший за MP3 320? Тоді ти переплутав рядки або зняв числа не з тих файлів.

Файл cmd.txt

На сервер їде й другий текстовий файл. Усередині — чотири команди, які ти справді виконав.

Один рядок — одна команда, без прикрас.

cmd.txt — що всередині
ffmpeg -y -i source.wav -c:a libmp3lame -b:a 320k out-320.mp3 ffmpeg -y -i source.wav -c:a libmp3lame -b:a 128k out-128.mp3 ffmpeg -y -i source.wav -c:a libmp3lame -b:a 64k out-64.mp3 ffmpeg -y -i source.wav -c:a flac out.flac

Чекер звірить бітрейти в -b:a з колонкою bitrate_kbps у CSV.

У cmd.txt написано 192k, а в звіті 128? Тоді критерій не пройде.

Сторінка і висновок

У index.html потрібні дві речі. Таблиця, побудована з CSV, і блок id="conclusion" щонайменше на 150 символів.

Пиши конкретно. На якому файлі різниця стала чутною. На чому в музиці ти її почув. Який формат обереш собі — і з якими числами в руках.

Що по FTP не піде source.wav, out.flac і три MP3 залишаються в локальній теці. FTP-приймальня відхиляє .wav, .mp3, .flac і будь-що більше за 2 МБ. Це технічне обмеження, а не побажання: аудіо вчитель слухає з твого екрана, у навушниках.
Питання

Ти замінив реальні розміри на «красиві»: 2 600 000, 1 500 000, 600 000, 240 000, 120 000. Так CSV виглядає акуратніше. Порядок правильний, формула сходиться. Що не так із таким звітом?

Крок 8

Практика: чотири файли і звіт

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

Ще раз про межу Усе, що з’являється в media/lesson-03/, — твоє й лишається в тебе. На сервер піднімаються рівно три текстові файли: report.csv, cmd.txt, index.html.
Крок 9

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

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

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

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

Крок 10

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

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

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

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

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

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

Допиши у блок id="conclusion" одне речення. Тема така: який формат ти обрав би для музики в телефоні і чому.

Обов’язково назви конкретні числа зі свого report.csv.

Не «MP3, бо він менший». А, наприклад, ось так:

«MP3 320. Він у 4,4 раза менший за WAV. У своїх навушниках я не почув різниці навіть на тарілках. FLAC лишу вдома для архіву».

Джерела

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

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

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