Якщо відеострімінг — це магія, то FFmpeg — це чарівна паличка. Або, скоріше, швейцарський ніж розміром з будинок. Це інструмент командного рядка, на якому тримається весь сучасний відео-інтернет. YouTube, Facebook, Netflix — усі вони під капотом використовують FFmpeg (або бібліотеки, з яких він виріс) для транскодування відео.
Сьогодні ми не будемо просто "вчити команди". Ми будемо вирішувати проблеми.
Стандартна структура команди виглядає так:
ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...
Але простіше думати про це так:
ffmpeg -i [ВХІД] [НАЛАШТУВАННЯ] [ВИХІД]
-i, стосуються вхідного файлу. Флаги після — вихідного.Ось 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" | Змінити розмір відео (ресайз). |
У вас є video.mov (величезний файл з камери). Треба зробити video.mp4 для вебу.
ffmpeg -i input.mov -c:v libx264 -c:a aac output.mp4
Переклад: Візьми input.mov, відео перероби в H.264, звук в AAC, і поклади в контейнер MP4.
Вам потрібна тільки аудіо-доріжка з концерту.
ffmpeg -i concert.mp4 -vn -c:a copy audio.aac
Переклад: -vn (No Video). -c:a copy (Не перекодовуй, просто скопіюй аудіо-потік як є). Це миттєва операція.
ffmpeg -i video.mp4 -vf "fps=10,scale=320:-1:flags=lanczos" -c:v gif output.gif
Переклад: Зроби 10 кадрів на секунду, зміни ширину на 320px (висоту підрахуй сам: -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
На Mac: Відкрийте Activity Monitor (Cmd+Space -> Activity Monitor). Перейдіть на вкладку CPU.
Або в терміналі запустіть htop (якщо встановлено).
Ми використаємо пресет veryslow, щоб змусити процесор попітніти.
ffmpeg -i input.mp4 -c:v libx264 -preset veryslow -crf 18 output_heavy.mp4
Дивіться на Activity Monitor. Ви побачите, як ffmpeg забирає 90-100% CPU. Вентилятори ноутбука можуть почати шуміти.
Це наочно показує ціну компресії. Кожен біт економії місця коштує обчислювальних ресурсів.
Далі ми перейдемо до того, як доставити це відео глядачеві, не змушуючи його чекати завантаження всього файлу. Зустрічайте HLS.