Одне завантаження, шість результатів
Сьогодні один вихідний відеоматеріал має перетворитися на вертикальний Reels 9:16, квадратний зріз 1:1, альбомну версію 16:9, варіант з вимкненим звуком та субтитрами для автозапуску, брендований зріз з логотипом та інтро/аутро, а також стиснуту версію, яка миттєво завантажується при слабкому з'єднанні. Той самий контент, шість або більше форм — помножених на кожну кампанію та кожного автора, щодня.

Масштабне вирішення цієї проблеми означає, що відео має бути програмно трансформовано, а не редагуватися вручну. Це робота, яку FFmpeg виконує в нашому пайплайні.
Чому саме FFmpeg
FFmpeg — це безкоштовний інструмент командного рядка з відкритим вихідним кодом для конвертації, фільтрації та кодування аудіо та відео. Він не має користувацького інтерфейсу — ви точно описуєте, що вам потрібно, у вигляді команди, і він її виконує. У цьому полягає вся цінність: команда може бути згенерована кодом, параметризована для кожного користувача, поставлена в чергу в пайплайні та виконана на сервері без участі людини. Редагування відео стає чимось, що ви програмуєте, а не чимось, що ви виконуєте за допомогою кліків.
Три властивості роблять його ідеальним для цієї конкретної проблеми, а не просто "відеоінструментом, який працює":
Компоновані фільтри. Граф фільтрів FFmpeg дозволяє об'єднувати операції масштабування → обрізки → накладання → згасання в один прохід. Це важливо, оскільки дозволяє уникнути запису проміжних файлів на кожному кроці — наївний пайплайн, який повторно кодує між кожною операцією, збільшує як час рендерингу, так і навантаження на сховище. Об'єднання в ланцюжок дозволяє виконати багатоступеневу трансформацію за одне кодування.
Операції на рівні потоків, а не лише повторне кодування. Для таких операцій, як обрізка, FFmpeg може копіювати існуючі потоки замість їх декодування та повторного кодування:
ffmpeg -i input.mp4 -ss 00:00:08 -t 15 -c copy highlight.mp4
-c copy — це різниця між обрізкою, яка завершується за секунди, та тією, що займає стільки ж часу, скільки повне повторне кодування. Ми використовуємо його всюди, де операція не вимагає торкання піксельних даних — обрізки, ремуксинг формату — і зберігаємо повне повторне кодування для кроків, які дійсно цього потребують, таких як масштабування або накладання.
Кодування з урахуванням апаратного забезпечення. FFmpeg може використовувати GPU-кодери (NVENC, QSV, VideoToolbox) замість CPU-орієнтованого libx264. Кодування на GPU виграє за сирою пропускною здатністю при великих обсягах; libx264 все ще забезпечує більш передбачувану, налаштовувану якість при заданому бітрейті. Вибір того, який з них використовувати, є справжнім компромісом, а не усталеним за замовчуванням — ми схиляємося до кодування на CPU для будь-якого брендованого контенту, де контроль якості має найбільше значення, і резервуємо шляхи GPU для великих обсягів, менш пріоритетних партій.
Як насправді використовується в пайплайні
Перекадрування.

Найпоширеніший запит — "зробіть так, щоб це підходило скрізь". Горизонтальне джерело стає вертикальним Reels за допомогою масштабування та обрізки. Пряма обрізка швидка, але відкидає частину кадру — добре для центрованих об'єктів, погано, коли об'єкт зміщується від центру. У таких випадках ми повертаємося до розмитого, повноекранного фону за правильно масштабованою копією переднього плану, щоб нічого не було обрізано:
ffmpeg -i input.mp4 -filter_complex \
"[0:v]scale=1080:1920,boxblur=20:5[bg]; \
[0:v]scale=1080:-2[fg]; \
[bg][fg]overlay=(W-w)/2:(H-h)/2" \
-c:a copy output_blurred.mp4
Це обдумане рішення з двома шляхами, а не єдиний фільтр за замовчуванням — обрізати, коли це безпечно, використовувати розмитий фон, коли ні.
Брендування, субтитри, аудіо. Логотипи, інтро та аутро застосовуються як параметризовані накладання та конкатенації, тому положення, розмір та непрозорість змінюються для кожного бренду без торкання коду пайплайну. Субтитри вбудовуються безпосередньо в кадри, а не постачаються як окрема доріжка субтитрів — стрічки з автоматичним відтворенням без звуку означають, що субтитри мають витримати будь-яке повторне кодування, яке застосовує цільова платформа, і вбудовані субтитри завжди це роблять; доріжка субтитрів іноді ні. Аудіо змішується та нормалізується за гучністю, щоб жоден кліп не був різко гучнішим за попередній у стрічці прокрутки.
Доставка. Кожен вихідний файл кодується за допомогою +faststart, що переміщує метадані файлу на початок, щоб відтворення могло розпочатися до повного завантаження файлу — невеликий прапорець, який має величезний вплив на сприйнятий час завантаження саме для коротких відео.
Компроміс, над яким ми все ще працюємо
Не кожне рішення тут є остаточним. Кодування на GPU проти CPU — це те, до чого ми повертаємося найчастіше: пропускна здатність GPU приваблива зі зростанням обсягів, але стабільність якості на бітрейт все ще віддає перевагу кодуванню на CPU для критичного для бренду контенту. Наразі цей поділ обробляється вручну для кожного типу завдання; перетворення його на автоматичне рішення маршрутизації з урахуванням якості — це наступна частина цього пайплайну, яку ми розробляємо.
Чому це важливо
У сукупності одне завантаження запускає пайплайн, який перекадровує його у вертикальні, квадратні та альбомні варіанти, брендує його, вбудовує субтитри, обрізає до найсильнішого фрагменту, мікшує та нормалізує аудіо, а також стискає для швидкої доставки — без відкриття редактором таймлайну. Подальше масштабування означає лише запуск більшої кількості FFmpeg воркерів паралельно, оскільки кожне завдання є незалежним і безстатевим.
Тенденція Reels не просто змінила вигляд контенту — вона змінила те, скільки форм має прийняти один фрагмент контенту, за часовими рамками, які ручне редагування не може витримати. FFmpeg витримує це, тому що він розглядає відео як програмоване та компоноване, а не як те, що потрібно обробляти вручну за допомогою кліків. Це справжня причина масштабування цього пайплайну: не те, що FFmpeg є потужним абстрактно, а те, що кожне рішення в ньому — обрізка проти розмитого фону, копіювання потоку проти повторного кодування, GPU проти CPU — приймається свідомо, для кожного конкретного випадку, а не за замовчуванням.
Якщо ви створюєте подібний пайплайн і бажаєте, щоб архітектуру переглянув фахівець, зв'яжіться з нами.

