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:v | Codec Video | -c:v libx264 | "Закодуй відео кодеком H.264" |
-c:a | Codec Audio | -c:a aac | "Закодуй аудіо кодеком AAC" |
-b:v | Bitrate Video | -b:v 1M | "Цільовий бітрейт — 1 Мегабіт/сек" |
-crf | Constant Rate Factor | -crf 23 | Якість (0-51). Менше = краще. 23 — дефолт. 18 — візуально без втрат. |
-preset | Швидкість кодування | -preset fast | ultrafast (найгірша якість, миттєво) <-> veryslow (найкраща якість, довго). |
-vf | Video 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.
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.