Модуль I · IT Skills (Hardware & Multimedia) · тема 3, урок 2 з 2 · 120 хвилин
На минулому уроці ти порахував, скільки важить нестиснений звук.
І зробив один файл out-320.mp3.
Сьогодні з того самого source.wav народиться
чотири різні файли.
Ти послухаєш їх у навушниках. І сам почуєш, де проходить межа між «однаково» і «гірше».
Головне: свій вибір ти доведеш не словами, а числами.
Числа підуть у файл report.csv.
report.csv;ffmpeg ти набираєш у своєму терміналі, у локальній
теці media/lesson-03/. Аудіофайли залишаються на твоєму комп’ютері
назавжди. По FTP на сервер їде лише текст: report.csv,
cmd.txt і index.html. Самі файли вчитель слухає
очно, у навушниках, за твоїм екраном.| Етап | Хв | Що робимо |
|---|---|---|
| Перевірка ДЗ | 10 | Розбір трьох розрахунків розміру |
| Демо: 4 конвертації | 15 | Команди й розбір кожного ключа |
| Практика 1 | 25 | Робиш чотири файли локально й слухаєш кожен |
| Перерва | 10 | — |
| Практика 2 | 25 | ffprobe → п’ять рядків report.csv |
| Практика 3 | 15 | Сторінка, висновок, вивантаження по FTP |
| Очна здача | 15 | Слухаємо 320 і 64, звіряємо числа з екраном |
| Підсумок і ДЗ | 5 | Дерево рішень «який формат обрати» |
| Разом | 120 |
report.csv — заголовок і рівно 5 рядків даних; cmd.txt —
чотири команди ffmpeg, які ти справді виконав; index.html —
таблиця, побудована з CSV, і блок id="conclusion" щонайменше
на 150 символів власного тексту.lesson-03/.
Не шукай lesson-06: її немає.Де саме в ланцюжку зникає звук — і чому назад його не повернути
Слово кодек склеїли з двох: «кодер» і «декодер».
Кодер пакує звук у компактний потік бітів. Декодер розпаковує його назад у звук. Один пакує валізу, другий розбирає.
MP3, FLAC, AAC, Opus — це все такі пари. Просто правила пакування в них різні.
Тепер найважливіше. Уся різниця між форматами народжується в одному місці — у кодері.
Далі не губиться нічого. Файл копіюється байт у байт. Декодер працює однаково чесно для будь-якої якості.
-i source.wav. Якщо кодувати MP3 з MP3, втрати накладаються
вдруге, а тривалість і розмір при цьому виглядають нормально.Нагадаємо коротко, що вже знаємо. Способів три, і різняться вони однією річчю: чи повернеться оригінал.
| Спосіб | Що робить | Чи повернеться оригінал |
|---|---|---|
| Нічого не робити WAV | усі семпли лежать як є | він і не зникав |
| Стиснути без втрат FLAC, ALAC | передбачувані ділянки записує коротше, як архіватор | так, біт у біт |
| Стиснути з втратами MP3, AAC, Opus | частину сигналу викидає назавжди за психоакустичною моделлю | ніколи |
Ти зробив out-64.mp3, випадково видалив source.wav,
а потім із того out-64.mp3 зробив новий WAV. Файл знову важить
2,6 МБ — рівно як оригінал. Що ти насправді отримав?
Одна цифра, яка керує і розміром, і якістю
Бітрейт — це скільки бітів кодек витрачає на одну секунду звуку.
Уяви, що ти переказуєш фільм другові. Можна за годину, а можна за хвилину. За хвилину — теж зрозуміло, але подробиці зникнуть.
У WAV бітрейт не налаштовується. Він випливає з формули сам.
Рахуємо: 44 100 × 16 × 2 = 1 411 200 біт/с. Це і є 1411 кбіт/с.
А от у MP3 бітрейт задаєш ти сам. Для цього є ключ -b:a.
Задати можна не будь-що. Стандарт поставив стелю 320 кбіт/с і підлогу 32 кбіт/с.
Просити «MP3 500k» немає сенсу. Кодер мовчки віддасть ті самі 320.
| кбіт/с | 3-хв трек | Де це трапляється насправді |
|---|---|---|
| 1411 | 31,8 МБ | WAV із компакт-диска — не бітрейт, а наслідок формули |
| 320 | 7,2 МБ | максимум MP3; те, що продають як «HQ» |
| 192 | 4,3 МБ | розумний компроміс; більшість людей далі різниці не чує |
| 128 | 2,9 МБ | «стандарт нульових»: файли з CD-дисків, старі збірки |
| 64 | 1,4 МБ | подкаст, лекція, голос; на музиці артефакти вже помітні |
| 32 | 0,7 МБ | нижня межа MP3; розбірлива мова і майже нічого більше |
Числа в колонці «3-хв трек» ніхто не вигадував. Це та сама формула з минулого уроку: бітрейт × секунди ÷ 8.
Перевіримо на 192 кбіт/с. Множимо: 192 000 × 180 ÷ 8 = 4 320 000 байтів. У таблиці стоїть 4,3 МБ. Сходиться.
Наш source.wav — це 15 секунд, 44,1 кГц, 16 біт, стерео.
Ось що з нього вийде. Ці п’ять чисел ти сьогодні побачиш на своєму екрані.
Один альбом є у двох форматах. У FLAC трек важить 25 МБ, у MP3 320 — 7 МБ. Ти слухаєш у навушниках за 300 грн, дорогою в маршрутці. Що кладеш у телефон і чому?
Бітрейт можна тримати однаковим весь трек. А можна міняти по ходу.
CBR — сталий бітрейт. Кожна секунда важить однаково.
На тиші витрачається стільки ж бітів, скільки на гучному приспіві. Марнотратно, зате розмір рахується наперед до кілобайта.
VBR — змінний бітрейт. Кодек дає більше бітів складним місцям і менше простим.
Це як пакувати валізу: важким речам більше місця. За того самого розміру якість виходить вища.
Мінус один: точний розмір наперед не порахуєш. Він залежить від самої музики.
report.csv має містити рівно п’ять рядків даних:
source.wav і чотири файли з практики. Якщо зробиш
out-vbr.mp3 для себе — чудово, але в CSV його не додавай,
інакше автоперевірка завалить перший же критерій.Ти заливаєш збірку на флешку рівно на 1 ГБ. Треба знати наперед, що влізуть усі треки до останнього. CBR чи VBR?
Спочатку — верхні частоти, потім — тихе поруч із гучним
MP3 не псує звук рівномірно. Він викидає не будь-що, а за списком правил.
Правила описують, чого вухо все одно не почує. Такий список зветься психоакустичною моделлю.
Два прийоми з нього ти почуєш уже сьогодні.
Перший прийом — зріз верхніх частот. Кодер відрізає все вище певної межі.
Нагорі мало енергії, а бітів вона з’їдає багато. Що нижчий бітрейт, то нижче опускається ця стеля.
Точні значення залежать від версії кодера, але порядок такий:
Ти зробив спектрограми out-320.mp3 і out-128.mp3.
У другій усе вище приблизно 16 кГц — рівна порожня смуга. Однокласник
каже: «у тебе ffmpeg зламався». Що ти відповіси?
Сусід увімкнув дриль — і шепіт поруч ти вже не розчуєш. Шепіт нікуди не подівся. Просто гучне його перекрило.
У звуці так само. Гучна нота глушить тиху, що звучить поруч. Це й зветься маскуванням.
Кодек рахує цей поріг. Замаскований тихий звук він не зберігає взагалі — жодного біта на нього.
На 320 кбіт/с бітів вистачає. Тому викидається тільки те, чого й так не чути.
На 64 бітів катастрофічно бракує. Модель починає різати вже й потрібне. Ось звідки беруться артефакти.
| Артефакт | На що схоже | Де чутно найшвидше |
|---|---|---|
| Pre-echo «передлуння» | перед різким ударом чути короткий шурхіт, якого в оригіналі немає | кастаньєти, клацання, старт барабана |
| Swirlies «плюскіт» | тарілки й шипіння «пливуть», ніби під водою | хай-хет, оплески, шум дощу |
| Глухість | звук ніби накрили ковдрою, зникло «повітря» | скрипки, вокальні «с» і «ш» |
| Розвал стерео | картинка звужується до центру | широкі мікси, живі записи |
Однокласник упевнений: «на 64 всі нормально, я нічого не чую». Ти вмикаєш йому фрагмент із тарілками — і він одразу чує. Чому саме тарілки видають низький бітрейт?
Чому «менший» і «гірший» — це не одне й те саме
Уяви список: 10, 11, 12, 13, 14. Замість п’яти чисел можна написати «від 10 до 14». Коротше — а відновлюється точно.
FLAC робить те саме зі звуком. Він дивиться на сусідні семпли й бачить, що ті змінюються передбачувано.
Тоді він пише не самі числа, а короткий опис, як їх відновити. Так само стискає файли будь-який архіватор, той самий ZIP.
Розпакований FLAC збігається з оригіналом біт у біт. Це можна перевірити хешем.
Виграш скромний саме тому, що чесний. Типово це 50—60% від розміру WAV.
Тиха класика тиснеться до 45%, щільний метал ледве до 70%. Бітрейт FLAC ти не задаєш — він виходить сам із музики.
| WAV | FLAC | MP3 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 посередині за розміром — отже, і за якістю посередній». Де він помиляється?
Набираються у твоєму терміналі, у теці media/lesson-03/
ffmpeg для учнів немає, і це не помилка адміністратора:
двадцять машин, які одночасно кодують звук, кладуть VPS. Відкрий PowerShell
або Terminal у себе й перейди в теку з минулого уроку.Зверни увагу: у кожній команді вхід один і той самий. Ніяких ланцюжків «з попереднього файлу» — інакше втрати накладуться вдруге.
| Ключ | Що робить | Що буде без нього |
|---|---|---|
-y | дозволяє перезаписати вихідний файл без питань | ffmpeg зупиниться й чекатиме, поки ти натиснеш y |
-i source.wav | вхідний файл; усе, що після -i, — джерело | ffmpeg не знає, що кодувати, і лається |
-c:a libmp3lame | кодек аудіодоріжки: c — codec, :a — audio | ffmpeg обере кодек сам за розширенням; для .mp3 це той самий libmp3lame, але краще писати явно |
-b:a 320k | бітрейт аудіодоріжки, 320 000 біт/с | для MP3 ffmpeg візьме свій типовий бітрейт, і твій звіт розсиплеться |
-c:a flac | кодек без втрат; бітрейт тут не задають узагалі | — |
out-320.mp3 | останній аргумент завжди вихідний файл | — |
:a
У файлі може бути кілька доріжок: відео, аудіо, субтитри. Двокрапка з літерою
каже, до якої саме доріжки стосується ключ. -b:v — бітрейт відео,
-b:a — бітрейт аудіо. У чистому звуковому файлі доріжка одна,
але звичку писати :a варто мати одразу.Бітрейт — не єдиний спосіб зменшити файл. Є ще два.
Можна рідше вимірювати звук. І можна лишити один канал замість двох.
Для голосу це нормально. Для музики — ні.
| Ключ | Розшифровка | Що робить |
|---|---|---|
-ar 22050 | audio rate | частота дискретизації на виході: 22 050 вимірів на секунду замість 44 100. За теоремою відліків це стеля 11 кГц — для мови вистачає |
-ac 1 | audio channels | кількість каналів: 1 — моно, 2 — стерео. Для лекції другий канал не несе інформації, а бітів забирає |
voice.mp3 у звіт не йде
Це демонстрація ключів -ar і -ac, а не п’ятий рядок CSV.
У report.csv — тільки source.wav і чотири файли
з практики.-lavfi вмикає фільтр. s=1024x512 — розмір картинки.
legend=1 домальовує підписані осі.
Тепер порівняй два PNG. У spec-128.png угорі буде чорна смуга.
У spec-320.png її немає.
PNG — це картинка, а не аудіо. Тому на сервер його класти можна, якщо він менший за 2 МБ.
Ти поспішав. І зробив out-128.mp3 не з source.wav,
а з готового out-320.mp3. Тривалість збіглася, розмір теж
нормальний, автоперевірка мовчить. Що з цим не так?
report.csvЦе головне, що ти сьогодні здаєш. Текстовий файл на п’ять рядків
CSV — це таблиця, записана текстом. Значення в рядку розділені комою.
Перший рядок називає колонки. Кожен наступний описує один файл.
Такий файл читає і людина, і Excel, і чекер. Заголовок має бути точно таким:
Не з голови й не з провідника Windows. Числа дає ffprobe.
Він віддає рівно ті три поля, що потрібні. І одразу через кому:
| Частина команди | Що робить |
|---|---|
-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 с.Ім’я файлу команда не друкує. Вона йде по списку в тому порядку, у якому ти файли перелічив.
Тому й записуй результати в тому самому порядку, зверху вниз.
Ось як має виглядати твій файл. Числа будуть свої — але схожі, бо джерело в усіх однакове.
Перевір себе тими самими діями, що й чекер. Розмір має сходитися з формулою бітрейт × тривалість ÷ 8.
Рахуємо: 128 000 × 15,023 ÷ 8 = 240 368 байтів. У файлі стоїть 240 252.
Різниця менша за відсоток. Це теги й вирівнювання кадрів.
Порядок розмірів має бути строго спадним: WAV > FLAC > 320 > 128 > 64.
Раптом FLAC у звіті менший за MP3 320? Тоді ти переплутав рядки або зняв числа не з тих файлів.
cmd.txtНа сервер їде й другий текстовий файл. Усередині — чотири команди, які ти справді виконав.
Один рядок — одна команда, без прикрас.
Чекер звірить бітрейти в -b:a з колонкою
bitrate_kbps у CSV.
У cmd.txt написано 192k, а в звіті 128? Тоді критерій не пройде.
У index.html потрібні дві речі. Таблиця, побудована з CSV,
і блок id="conclusion" щонайменше на 150 символів.
Пиши конкретно. На якому файлі різниця стала чутною. На чому в музиці ти її почув. Який формат обереш собі — і з якими числами в руках.
source.wav, out.flac і три MP3 залишаються
в локальній теці. FTP-приймальня відхиляє .wav, .mp3,
.flac і будь-що більше за 2 МБ. Це технічне обмеження, а не
побажання: аудіо вчитель слухає з твого екрана, у навушниках.Ти замінив реальні розміри на «красиві»: 2 600 000, 1 500 000, 600 000, 240 000, 120 000. Так CSV виглядає акуратніше. Порядок правильний, формула сходиться. Що не так із таким звітом?
Кроки 1—9 — у твоєму терміналі, кроки 10—11 — на сервері. Галочки зберігаються, сторінку можна закрити.
media/lesson-03/, — твоє й лишається в тебе.
На сервер піднімаються рівно три текстові файли: report.csv,
cmd.txt, index.html.Чекер не слухає музику. Він звіряє твій звіт сам із собою — і вигадані числа не сходяться. Спроби не обмежені.
Демонстраційний режим: результат згенеровано для показу. На сервері
ця кнопка викликає POST /api/check, який запускає
check 03 від імені учня.
media/lesson-03/: у ній лежать
source.wav, три MP3 і out.flac;ffprobe out-64.mp3 запускається просто зараз — реальні бітрейт
і розмір звіряються з відповідним рядком report.csv на сайті;ffprobe out.flac показує codec_name: flac,
а не перейменований MP3;ffmpeg ішли
від source.wav.Це те, що бачить учитель, коли виставляє оцінку.
| Складник | Вага | Результат |
|---|
source.wav, а не від попереднього файлу.ffprobe показує це за секунду;bit_rate у бітах із колонкою в кілобітах;Допиши у блок id="conclusion" одне речення. Тема така:
який формат ти обрав би для музики в телефоні і чому.
Обов’язково назви конкретні числа зі свого report.csv.
Не «MP3, бо він менший». А, наприклад, ось так:
«MP3 320. Він у 4,4 раза менший за WAV. У своїх навушниках я не почув різниці навіть на тарілках. FLAC лишу вдома для архіву».
Усі значення на цій сторінці — зі стандартів і документації. Перевіряти дозволено й корисно.
-b:a, -q:a, CBR і VBR.
trac.ffmpeg.org/wiki/Encode/MP3ffmpeg — ключі -c:a,
-b:a, -ar, -ac, -y.
ffmpeg.org/ffmpeg.htmlffprobe — -show_entries,
-of csv=p=0.
ffmpeg.org/ffprobe.htmlshowspectrumpic — побудова спектрограми.
ffmpeg.org/ffmpeg-filters.htmlПовний список із поясненнями, що звідки взято, —
у файлі urok-06-джерела.md поруч із цією сторінкою.