Media Streaming

03. The Gym: FFmpeg Deep Dive

03. The Gym: FFmpeg Deep Dive

1. Вступ та Контекст

Якщо відеострімінг — це магія, то FFmpeg — це чарівна паличка. Або, скоріше, швейцарський ніж розміром з будинок. Це інструмент командного рядка, на якому тримається весь сучасний відео-інтернет. YouTube, Facebook, Netflix — усі вони під капотом використовують FFmpeg (або бібліотеки, з яких він виріс) для транскодування відео.

Сьогодні ми не будемо просто "вчити команди". Ми будемо вирішувати проблеми.


2. Основи: Синтаксис

Стандартна структура команди виглядає так:

ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...

Але простіше думати про це так: ffmpeg -i [ВХІД] [НАЛАШТУВАННЯ] [ВИХІД]

Лайфхак: Порядок аргументів має значення. Флаги, що стоять перед-i, стосуються вхідного файлу. Флаги після — вихідного.

3. Ключові Флаги (Ваш Арсенал)

Ось 20% команд, які ви будете використовувати 80% часу.

ФлагЗначенняПрикладПояснення
-c:vCodec Video-c:v libx264"Закодуй відео кодеком H.264"
-c:aCodec Audio-c:a aac"Закодуй аудіо кодеком AAC"
-b:vBitrate Video-b:v 1M"Цільовий бітрейт — 1 Мегабіт/сек"
-crfConstant Rate Factor-crf 23Якість (0-51). Менше = краще. 23 — дефолт. 18 — візуально без втрат.
-presetШвидкість кодування-preset fastultrafast (найгірша якість, миттєво) <-> veryslow (найкраща якість, довго).
-vfVideo Filter-vf "scale=1280:720"Змінити розмір відео (ресайз).

4. Сценарії використання (Recipes)

Сценарій 1: "Проста конвертація"

У вас є video.mov (величезний файл з камери). Треба зробити video.mp4 для вебу.

ffmpeg -i input.mov -c:v libx264 -c:a aac output.mp4

Переклад: Візьми input.mov, відео перероби в H.264, звук в AAC, і поклади в контейнер MP4.

Сценарій 2: "Витягнути звук"

Вам потрібна тільки аудіо-доріжка з концерту.

ffmpeg -i concert.mp4 -vn -c:a copy audio.aac

Переклад: -vn (No Video). -c:a copy (Не перекодовуй, просто скопіюй аудіо-потік як є). Це миттєва операція.

Сценарій 3: "Зробити GIF (якісний!)"

ffmpeg -i video.mp4 -vf "fps=10,scale=320:-1:flags=lanczos" -c:v gif output.gif

Переклад: Зроби 10 кадрів на секунду, зміни ширину на 320px (висоту підрахуй сам: -1), використай алгоритм Ланцоша для чіткості.


5. Демонстрація: The Transcoding Terminal

Це демо покаже, як "важко" комп'ютеру стискати відео.

1. Завантажте тестове відео

Ви можете використати своє, або завантажити семпл Big Buck Bunny.

Download Big Buck Bunny

curl -O https://test-videos.co.uk/vids/bigbuckbunny/mp4/h264/1080/Big_Buck_Bunny_1080_10s_5MB.mp4
mv Big_Buck_Bunny_1080_10s_5MB.mp4 input.mp4

2. Відкрийте монітор ресурсів

На Mac: Відкрийте Activity Monitor (Cmd+Space -> Activity Monitor). Перейдіть на вкладку CPU. Або в терміналі запустіть htop (якщо встановлено).

3. Запустіть "Важке" кодування

Ми використаємо пресет veryslow, щоб змусити процесор попітніти.

ffmpeg -i input.mp4 -c:v libx264 -preset veryslow -crf 18 output_heavy.mp4

4. Спостерігайте

Дивіться на Activity Monitor. Ви побачите, як ffmpeg забирає 90-100% CPU. Вентилятори ноутбука можуть почати шуміти. Це наочно показує ціну компресії. Кожен біт економії місця коштує обчислювальних ресурсів.


6. Резюме

  • FFmpeg — це основа всього відео-пайплайну.
  • Copy (-c copy) — ваш найкращий друг. Якщо можна не перекодовувати — не перекодовуйте. Це зберігає якість і час.
  • CRF — це магічна кнопка "Зроби мені добре". Використовуйте її замість бітрейту, якщо не обмежені пропускною здатністю каналу.

Далі ми перейдемо до того, як доставити це відео глядачеві, не змушуючи його чекати завантаження всього файлу. Зустрічайте HLS.

Copyright © 2026