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

Відео зсередини: fps, роздільна здатність, кодек ≠ контейнер

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

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

Модуль I · Тема 5 «Мультимедіа: відео» · урок 1 з 2 · 120 хвилин

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

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

Хід уроку

ЕтапХвЩо робимо
Вхід: 12 / 24 / 60 fps10Та сама анімація в трьох вікнах — де твій поріг плавності
Роздільна здатність і бітрейт20Одне відео в трьох якостях, шкала ваги файлу
Кодек ≠ контейнер20Схема-«коробка»: MP4 / MKV / WebM і що всередині
Перерва10
Чому відео стискається20Ключові кадри й міжкадрова різниця, I / P / B
Свій термінал: ffprobe30probe.txt і перше перекодування в 720p30
Підсумок і ДЗ10Калькулятор ваги, профілі платформ
Разом120
Головне правило теми: важке — локально, легке — на сервер ffmpeg і ffprobe ти запускаєш у терміналі власного комп'ютера (PowerShell або Terminal), у теці media/lesson-05/. На сервері ffmpeg немає взагалі — і це навмисно: 25 машин, які одночасно кодують 1080p, кладуть VPS. По FTP їде тільки текст: probe.txt, cmd.txt, розрахунок і index.html. Відеофайли лишаються в тебе — FTP-приймальня .mp4 просто відхилить.
Перше, що робить клас Відкрий свій термінал і виконай ffprobe -version. Якщо команду не знайдено — підніми руку зараз, а не на тридцятій хвилині практики.
Чому тека зветься lesson-05, а урок — девʼятий Теки практики звуться за темою, а не за номером уроку. Тема 5 — це уроки 9 і 10, і обидва складають роботу в одну теку lesson-05/. Не шукай lesson-09: її немає.
Крок 2

Відео — це швидкий фотоальбом

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

Уяви блокнот, де на кожній сторінці намальовано чоловічка. Гортаєш швидко — він біжить. Відео влаштоване так само.

Камера не знімає рух. Вона знімає окремі знімки — кадри. Потім показує їх один за одним. Мозок домальовує рух між ними сам.

Скільки сторінок блокнота гортають за секунду — таке й число. Воно зветься fps: frames per second, кадрів за секунду. Це головне число плавності.

З нього видно й інше: скільки часу висить один кадр. При 24 fps — 42 мілісекунди. При 60 fps — 17 мілісекунд.

Одна секунда відео, поділена на кадри 12 fps 83 мс 24 fps 42 мс 60 fps 17 мс одна смуга = один кадр
Смуга — це один кадр. Ліворуч підписано, скільки часу він тримається на екрані. Уся стрічка в усіх трьох рядках — рівно одна секунда.

Звідки взялися саме ці числа

fpsДе зустрічаєтьсяЧому саме так
24кіностандарт звукового кіно з кінця 1920-х: мінімум, за якого і рух прийнятний, і плівки витрачається небагато. Лишився традицією — глядач звик до «кінематографічного» руху
25телебачення PAL, Європаприв'язка до частоти електромережі 50 Гц: 50 полів на секунду — це 25 повних кадрів
29,97телебачення NTSC, СШАбуло 30, але з приходом кольору частоту зсунули на 1000/1001, щоб кольоровий сигнал не заважав звуковому. Досі трапляється у файлах
30інтернет-відео, телефонибазовий режим більшості камер смартфонів
50 / 60спорт, ігри, екшншвидкий рух на 24—30 fps «розсипається» — око бачить стрибки замість руху
120+ігрові монітори, сповільнена зйомкадля гри важлива не тільки плавність, а й затримка: при 120 fps між твоїм кліком і зміною картинки минає 8 мс замість 33

Чому ігри прагнуть 60+, а кіно живе на 24. Кіно ти просто дивишся. Рух там уже готовий, а камера навмисно змазує кадр. Тому стики між кадрами непомітні.

У грі ти дієш. Кожен новий кадр — це ще й момент, коли гра врахувала твою мишу. Тому 60 fps у грі відчуваються не так, як 60 fps у ролику. Справа не тільки в очах, а й у затримці відповіді.

Більше fps ≠ більший файл Це головна пастка теми. Вага файлу залежить від бітрейту й тривалості, а не від кількості кадрів. Якщо при 60 fps лишити той самий бітрейт, ті самі дані поділяться на вдвічі більшу кількість кадрів. Кожен кадр отримає вдвічі менше — і стане приблизно вдвічі гіршим. Тому для 60 fps бітрейт зазвичай і піднімають.
Питання

Ти знімаєш на телефон 10 секунд у 60 fps, друг — ті самі 10 секунд у 30 fps. Бітрейт в обох камерах виставлено однаковий, 8 Мбіт/с. Чий файл важчий?

Крок 3

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

720p і 1080p — це не «якість», а два конкретні числа

Кожен кадр складений із крихітних квадратиків — пікселів. Вони лежать сіткою, як клітинки в зошиті. Розмір цієї сітки й зветься роздільною здатністю: ширина × висота.

Запис «1080p» означає 1080 рядків клітинок по висоті. Літера p — від progressive: кадр малюється цілком, а не через рядок.

Кадри в реальному масштабі один до одного 360p · 640×360 · 0,23 Мп 720p · 1280×720 · 0,92 Мп 1080p · 1920×1080 · 2,07 Мп 4K UHD · 3840×2160 · 8,29 Мп кожен наступний крок подвоює ширину й висоту — тобто вчетверо збільшує кількість пікселів
Прямокутники накладені кутом до кута, тому видно справжнє співвідношення. 4K містить рівно вчетверо більше пікселів, ніж 1080p, і в 36 разів більше, ніж 360p.
НазваПікселів у кадріУсьогоДе зустрічається
360p640 × 360230 400економний режим на мобільному інтернеті
480p854 × 480409 920«стандартна якість», старі ролики
720p (HD)1280 × 720921 600відеодзвінки, стріми, наш урок 10
1080p (Full HD)1920 × 10802 073 600найпоширеніший формат зйомки й публікації
1440p (2K)2560 × 14403 686 400ігрові монітори
2160p (4K UHD)3840 × 21608 294 400телевізори, сучасні камери

Дві цифри варто помітити. Перша: 4K — це 3840×2160, а не 4000 пікселів. «4K» тут радше рекламна назва для «вчетверо більше за Full HD».

Друга: у кіно свій 4K — DCI 4K, 4096×2160. Він трохи ширший. Тому файл із камери й файл із кінотеатру можуть обидва зватися 4K і бути різними.

Співвідношення сторін Усі рядки таблиці, крім DCI, мають пропорцію 16:9. Вертикальне відео для TikTok чи Reels — це та сама сітка, покладена набік: 1080×1920, пропорція 9:16. Пікселів стільки ж, а ось на екрані телевізора з боків будуть чорні поля.
Питання

Мобільний інтернет ледь тягне, і ти перемикаєш ролик на YouTube з 1080p на 360p. У скільки разів менше пікселів тепер у кожному кадрі?

Крок 4

Бітрейт — це і є вага

Одне число, від якого прямо залежить розмір файлу

Уяви кран, з якого біжить вода. Що ширше відкрутиш — то більше набіжить за хвилину. У відео роль такого крана грає бітрейт.

Бітрейт — скільки бітів даних припадає на одну секунду відео. Міряють у кілобітах або мегабітах за секунду: кбіт/с, Мбіт/с.

Це той самий бітрейт, що й в аудіо з теми 3. Просто числа більші. У музики — сотні кілобітів, у відео — тисячі.

Розмір у байтах бітрейт (біт/с) × тривалість (с) ÷ 8

Ділення на 8 — це перехід від бітів до байтів. Якщо бітрейт дано в кілобітах, спочатку домнож на 1000. Приклад: ролик 60 секунд при 5000 кбіт/с важить 5 000 000 × 60 ÷ 8 = 37 500 000 байтів, тобто 37,5 МБ.

Той самий ролик на 60 секунд при різному бітрейті 1 000 кбіт/с 7,5 МБ 2 500 кбіт/с 18,8 МБ 5 000 кбіт/с 37,5 МБ 8 000 кбіт/с 60 МБ 16 000 кбіт/с 120 МБ залежність рівно пряма: удвічі більший бітрейт — удвічі важчий файл
Тривалість однакова, роздільна здатність однакова. Змінюється тільки бітрейт — і разом із ним рівно пропорційно змінюється вага.

Тоді до чого тут роздільна здатність

Питання пряме, а відповідь не очевидна. Роздільна здатність сама по собі байтів не додає.

Вона каже інше: скільки бітрейту треба, щоб картинка не розсипалася. У 4K-кадрі вчетверо більше пікселів, ніж у 1080p. Отже, і даних на нього йде приблизно вчетверо більше.

Є зручна перевірка — біти на піксель. Рахують так: бітрейт ÷ (ширина × висота × fps).

Для 1080p30 при 8000 кбіт/с це 8 000 000 ÷ (1920 × 1080 × 30) ≈ 0,13. Для H.264 звичайний діапазон — приблизно 0,05—0,15.

Нижче 0,05 картинка починає «пливти» на русі. Це орієнтир, а не закон. Складній сцені треба більше, спокійній — менше.

Роздільність і fpsТиповий бітрейт H.264Хвилина відео
360p301 000 кбіт/с≈ 7,5 МБ
720p305 000 кбіт/с≈ 37,5 МБ
1080p308 000 кбіт/с≈ 60 МБ
1080p6012 000 кбіт/с≈ 90 МБ
2160p30 (4K)35 000—45 000 кбіт/с≈ 263—338 МБ

Числа з рекомендацій YouTube щодо завантаження в H.264. Це не обов'язкові значення, а те, з чого варто починати.

Питання

Ролик на 40 секунд не влазить у ліміт месенджера. Тривалість різати не можна, кадр обрізати теж. Що зменшить вагу найпрямішим шляхом?

Крок 5

Кодек — це мова, контейнер — це коробка

Найчастіша плутанина в усій темі, і найдорожча на практиці

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

Цей шифр і зветься кодек. Він відповідає на питання «як саме записані пікселі». Назва codec так і складена: coder + decoder, тобто «шифрувальник + розшифрувальник».

Кодеки для відео: H.264, H.265, VP9, AV1. Для звуку: AAC, Opus, MP3.

А тепер уяви пенал. Усередині ручка, олівець і гумка. Пенал не пише — він тримає все разом і показує, де що лежить.

Такий пенал для відео зветься контейнер. Усередині нього доріжка картинки, доріжка звуку й службові дрібниці. Приклади: MP4, MKV, WebM, MOV, AVI.

Саме контейнер зазвичай і дає файлу розширення.

Той самий ролик, дві різні коробки MP4 — контейнер .mp4 доріжка 0 · відео H.264 — мова, якою стиснуто картинку доріжка 1 · звук AAC — мова, якою стиснуто звук службове субтитри, обкладинка, розділи, час кадрів WebM — контейнер .webm доріжка 0 · відео VP9 або AV1 — інша мова, та сама картинка доріжка 1 · звук Opus — інша мова, той самий звук службове субтитри WebVTT, час кадрів коробка каже, як складені доріжки · мова каже, як стиснута кожна з них
Розширення файлу — це напис на коробці. Що саме лежить усередині, воно не гарантує.

Що з чим уживається

КонтейнерВідеокодеки всерединіАудіокодекиДе живе
MP4H.264, H.265, AV1AAC, MP3телефони, соцмережі, телевізори — найсумісніший варіант
MKV (Matroska)майже будь-який: H.264, H.265, VP9, AV1майже будь-який: AAC, Opus, FLAC, DTSфільми з кількома доріжками й субтитрами; телевізори читають не завжди
WebMVP8, VP9, AV1Vorbis, Opusбраузери, відкриті формати без ліцензійних платежів
MOVH.264, H.265, ProResAAC, PCMтехніка Apple і відеомонтаж
AVIстарі: MPEG-4 Part 2, MJPEGMP3, PCMформат 1990-х, зараз майже не використовується

Чотири відеокодеки, які варто знати

КодекРікСильна сторонаСлабка сторона
H.264 (AVC)2003його розуміє все: телевізор, телефон, браузер, стара приставканайменш економний із чотирьох
H.265 (HEVC)2013та сама картинка приблизно за половину бітрейтуліцензійні платежі, тому браузери підтримують нерівно
VP92013відкритий і безкоштовний, ним віддає YouTubeкодує повільно, старі пристрої не тягнуть
AV12018найекономніший, відкритий, без ліцензійних платежівкодування дуже повільне; на старому залізі декодується важко
Звідки береться «формат не підтримується» Плеєр спершу відкриває коробку — це майже завжди вдається. Потім шукає в собі декодер для мови всередині. Немає декодера — буде звук без картинки, чорний екран або пряма відмова. Файл при цьому цілий, і на іншому пристрої він гратиме.
Питання

Файл зветься film.mp4, на комп'ютері грає нормально, ти кидаєш його на флешку — і телевізор пише «формат не підтримується». Файл скопіювався повністю й не пошкоджений. У чому найімовірніша річ?

Із цього поділу випливає корисна річ. Хочеш перекласти ролик з MKV у MP4? Картинку чіпати не обов'язково.

Доріжку просто перекладають з одного пенала в інший — як є. Це звуть ремукс, у ffmpeg це ключ -c copy. Триває секунди і якості не псує: шифр лишається той самий.

Питання

Ролик лежить у MKV, а сайт приймає тільки MP4. Картинка тебе повністю влаштовує. Що правильно зробити?

Крок 6

Чому 45 секунд відео важать 29 МБ, а не 3 гігабайти

Ключові кадри й міжкадрове стиснення

Порахуймо чесно, зовсім без стиснення. Один кадр 1920×1080 — це 2 073 600 пікселів. По 3 байти на колір кожен. Виходить 6,2 МБ на кадр.

При 30 fps це вже 187 МБ за секунду. І близько 8,4 ГБ на 45 секунд. Жоден телефон стільки не пише.

Порятунок у тому, що сусідні кадри майже однакові. Між ними при 30 fps минає 33 мілісекунди. За такий час у кадрі змінюється дуже мало.

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

B бере різницю з обох боків I P P B P P P P P I вага кадру ≈ 60 КБ ≈ 5 КБ група кадрів (GOP) — від одного ключового кадру до наступного
Повний кадр малюється зрідка. Між ними записується лише те, що змінилося, — тут це маленький квадрат, який рухається праворуч.

Три типи кадрів

ТипПовна назваЩо міститьВага
IIntra-coded, ключовий кадр (keyframe)цілу картинку, ні від кого не залежитьнайбільша
PPredictedрізницю з попереднім кадрому 5—20 разів менша
BBi-directional predictedрізницю одразу з попереднім і з наступним кадромнайменша

Ключовий кадр — як повна фотографія кімнати. А P і B — записки на кшталт «стілець з'їхав на два кроки праворуч». Записка коротка, фотографія важка.

Відрізок від одного ключового кадру до наступного звуть групою кадрів (GOP, group of pictures). Повний кадр ставлять раз на 1—2 секунди. Це раз на 30—60 кадрів. І обов'язково на кожній зміні сцени.

Звідси зрозуміло, чому перемотка поводиться саме так. Плеєр може почати показ тільки з ключового кадру. Сама по собі записка «стілець з'їхав» нічого не варта: треба фотографія, до якої вона додається.

Тому повзунок «стрибає» до найближчого I-кадру. І тому стрім на слабкому інтернеті підхоплюється не миттєво.

Звідси ж — правило «тихого відео» Запис екрана, де ти показуєш слайди, стискається у рази краще за екшн-сцену. Між кадрами там майже нічого не змінюється, і P-кадри виходять майже порожніми. Дощ, вогонь, листя на вітрі й дрібнозернистий шум — навпаки, найважчі сцени: там змінюється кожен піксель.
Питання

Два ролики по хвилині, обидва 1080p, обидва кодовані з однаковою заданою якістю: запис екрана зі слайдами і зйомка футбольного матчу. Який файл вийде помітно важчим і чому?

Крок 7

Калькулятор ваги відео

Постав параметри — і подивися, у що вони обертаються в мегабайтах

Формула та сама: (відео + звук) кбіт/с × 1000 × секунди ÷ 8 = байти.

Роздільна здатність і fps ваги не додають. Вони стоять тут для іншого: щоб порахувати біти на піксель. Так видно, чи вистачає обраного бітрейту на таку картинку.

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

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

Профілі-пресети — це типові стартові налаштування, а не закон. Офіційні числа тут лише в YouTube: 8 Мбіт/с для 1080p30 і 12 Мбіт/с для 1080p60 — це його рекомендації щодо завантаження. Значення для TikTok і Telegram — практичні орієнтири; єдине тверде обмеження Telegram — розмір файлу до 2 ГБ (у Premium — до 4 ГБ).

Питання

Тобі треба вмістити 15 хвилин 1080p30 у 500 МБ вільного місця (звуком знехтуй). Який приблизно бітрейт можна собі дозволити?

Крок 8

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

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

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

Спершу переконайся, що інструмент є. ffprobe ставиться разом із ffmpeg одним пакетом.

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

Короткий погляд на файл

ffmpeg перетворює медіа, а ffprobe лише розповідає про нього. Він нічого не змінює, тому запускати його безпечно скільки завгодно разів.

короткий паспорт файлу
$ ffprobe -hide_banner source.mp4 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'source.mp4': Metadata: major_brand : isom compatible_brands: isomiso2avc1mp41 Duration: 00:00:45.01, start: 0.000000, bitrate: 5145 kb/s Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080, 5012 kb/s, 30 fps, 30 tbr, 15360 tbn Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s

Тут уже видно все головне. mov,mp4,m4a… — родина контейнера, тобто пенала. Duration — 45,01 секунди. bitrate: 5145 kb/s — загальний бітрейт файлу.

Далі йдуть дві доріжки. Відео: h264, 1920×1080, 30 fps, 5012 кбіт/с. Звук: aac, 48 кГц, стерео, 128 кбіт/с.

Швидка перевірка формулою. 5 145 600 біт/с × 45,013 с ÷ 8 ≈ 28 952 000 байтів, тобто 29,0 МБ. Далі побачимо в полі size, наскільки збіглося.

Повний паспорт: ключ за ключем

повний вивід
$ ffprobe -hide_banner -show_streams -show_format source.mp4
Частина командиЩо робить
-hide_bannerприбирає шапку з версією і списком бібліотек — вона щоразу однакова й лише заважає
-show_streamsдані про кожну доріжку окремо: кодек, ширина, висота, fps
-show_formatдані про файл загалом: контейнер, тривалість, розмір у байтах
source.mp4власне файл; він має лежати в поточній теці
відповідь ffprobe (скорочено)
[STREAM] index=0 codec_name=h264 codec_long_name=H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 profile=High codec_type=video width=1920 height=1080 coded_width=1920 coded_height=1088 pix_fmt=yuv420p r_frame_rate=30/1 avg_frame_rate=30/1 duration=45.000000 bit_rate=5012480 nb_frames=1350 [/STREAM] [STREAM] index=1 codec_name=aac codec_type=audio sample_rate=48000 channels=2 channel_layout=stereo duration=45.013000 bit_rate=128000 [/STREAM] [FORMAT] filename=source.mp4 nb_streams=2 format_name=mov,mp4,m4a,3gp,3g2,mj2 duration=45.013000 size=28952362 bit_rate=5145600 [/FORMAT]
РядокЗначення тутЩо це означає
codec_nameh264мова, якою стиснута картинка. Саме її може не знати телевізор
profileHighнабір дозволених прийомів усередині H.264; старі пристрої іноді тягнуть лише Baseline
codec_typevideoтип доріжки. Автоперевірка шукає рядки codec_type=video і codec_type=audio
width / height1920 / 1080роздільна здатність кадру — те, що ти зміниш у першому перекодуванні
coded_height1088реально закодована висота: H.264 працює блоками по 16 пікселів, а 1080 на 16 не ділиться. Зайві 8 рядків просто не показуються
pix_fmtyuv420pколір записано з проріджуванням: яскравість у повній роздільності, кольоровість — учетверо рідше. Око цього майже не помічає
r_frame_rate30/1частота кадрів дробом: 30 ÷ 1 = 30 fps. Побачиш 30000/1001 — це 29,97, спадок кольорового NTSC
duration45.013000тривалість у секундах; саме її звіряє автоперевірка з еталонним джерелом
bit_rate (STREAM)5012480бітрейт самої відеодоріжки, біт/с
nb_frames1350кадрів усього: 30 × 45 = 1350. Перевірка, що fps і тривалість узгоджені
format_namemov,mp4,m4a…контейнер. Родина одна, бо MP4 виріс із формату QuickTime
size28952362реальний розмір файлу в байтах — 28,95 МБ. Наш розрахунок дав 28 952 000: збіг
bit_rate (FORMAT)5145600загальний бітрейт: 5 012 480 (відео) + 128 000 (звук) + службові дані контейнера
Питання

У чужому probe.txt ти бачиш рядок r_frame_rate=30000/1001. Що це за частота кадрів?

Зберігаємо вивід у probe.txt

Саме цей текстовий файл поїде на сервер. Він важить кілька кілобайтів, і по ньому вчитель та чекер бачать, що ти зондував справжнє джерело.

macOS / Linux · cmd.exe
$ ffprobe -hide_banner -show_streams -show_format source.mp4 > probe.txt 2>&1

> probe.txt перенаправляє звичайний вивід у файл замість екрана. 2>&1 додає туди ж потік помилок: якщо щось піде не так, текст помилки теж збережеться, і буде видно, що саме сталося.

У PowerShell інакше Windows PowerShell 5.1 записує через > у кодуванні UTF-16 — такий файл чекер прочитати не зможе. Використовуй варіант нижче.
Windows PowerShell
$ ffprobe -hide_banner -show_streams -show_format source.mp4 2>&1 | Out-File -Encoding utf8 probe.txt

Перевір результат одразу — файл має бути більший за 500 байтів і містити секції [STREAM] та [FORMAT].

перевірка probe.txt
# macOS, Linux, Git Bash $ ls -l probe.txt && head -8 probe.txt # Windows PowerShell 5.1: тут немає ні ls -l, ні && $ Get-Item probe.txt; Get-Content probe.txt -TotalCount 8

Перше перекодування

Тепер зробимо з 1080p30 варіант 720p30. Це перша команда, що створює новий файл, — і перша, від якої в тебе зашумить кулер.

твій термінал, тека media/lesson-05
$ ffmpeg -i source.mp4 -vf scale=1280:720 -r 30 -c:v libx264 v720p30.mp4
Частина командиЩо робить
-i source.mp4вхідний файл (input). Усе, що написано до назви вихідного файлу, стосується обробки
-vf scale=1280:720відеофільтр масштабування: новий розмір кадру
-r 30частота кадрів вихідного файлу — 30 fps
-c:v libx264кодувальник відео: бібліотека x264, яка робить H.264
v720p30.mp4вихідний файл. Розширення підказує ffmpeg, який контейнер збирати
Не плутай -r і -b:v -r 30 — це кадри за секунду. -b:v 2500k — це бітрейт, кілобіти за секунду. Обидва пишуться цифрою перед назвою файлу й обидва впливають на результат, але зовсім по-різному: перший на плавність, другий на вагу.

Поки йде кодування, відкрий диспетчер завдань. Побачиш, як завантаження процесора йде під стелю. Тепер уяви це саме на одному сервері помножене на весь клас — ось чому ffmpeg живе на твоїй машині.

Коли команда відпрацює, перевір результат тим самим інструментом і відкрий файл у плеєрі.

перевірка результату
$ ffprobe -hide_banner v720p30.mp4 Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720, 2113 kb/s, 30 fps, 30 tbr, 15360 tbn

Запиши цю команду і команду перекодування в cmd.txt — по одному рядку на команду. Це другий текстовий файл, який поїде на сервер, і саме за ним вчитель питатиме, який параметр за що відповідав.

Питання

Ти зробив probe.txt і v720p30.mp4. Хочеш, щоб учитель побачив і те, і те. Що з цього поїде на сервер по FTP?

Крок 9

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

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

Що нікуди не завантажується source.mp4 і v720p30.mp4 лишаються в локальній теці media/lesson-05/. FTP-приймальня відхиляє .mp4, .webm, .mkv і будь-що більше за 2 МБ — це технічне обмеження на рівні сервера, а не побажання. Відео вчитель дивиться очно, на твоєму екрані.
Крок 10

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

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

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

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

Крок 11

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

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

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

Три речі, які треба винести з уроку

  1. fps — плавність, роздільна здатність — деталізація, бітрейт — вага. Це три різні ручки, і крутяться вони окремо.
  2. Кодек ≠ контейнер. Розширення каже про коробку. Що всередині — показує тільки ffprobe.
  3. Ключові кадри. Відео важить прийнятно тільки тому, що більшість кадрів — це різниця, а не картинка.

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

Відкрий налаштування якості у своєму улюбленому відеосервісі. Випиши всі варіанти, які він пропонує.

Для кожного вкажи розмір кадру в пікселях і приблизний бітрейт. Бітрейт візьми з нашої таблиці або з довідки сервісу. Потрібно щонайменше чотири рядки, оформлених таблицею. Вона знадобиться на уроці 10.

Джерела

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

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

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