Як додати мій логотип за останні 60 секунд у відео з ffmpeg?


0

Я цілими днями шукав це рішення. Я все знайшов способи додати логотип перші секунди або через кілька секунд або лише між певними частинами (наприклад, між 30 та 210 секундами)

Отже, головне питання: Як додати мій логотип за останні 60 секунд до відео з ffmpeg? У мене дуже багато відео різної довжини і просто хочу, щоб останні 60 секунд накладалися логотипом .png (в цьому випадку також в лівій нижній частині екрана)

В даний час я використовую те, що ви бачите нижче, що добре працює (показує логотип завжди, за винятком 30-210 секунд відео), але, як я згадував у назві, він не робить саме те, що мені хочеться.

-i video.mp4 -vf "movie=/logo.png [watermark]; [in][watermark] overlay=1:main_h-overlay_h-1:enable=not(between'(t,30,210)') [out]"

Відповіді:


2

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

Основний шаблон є

ffmpeg -i in.mp4 -sseof -60 -copyts -i in.mp4 -loop 1 -i logo.png -filter_complex "[1][2]overlay=shortest=1[logo];[0][logo]overlay" out.mp4

Відео вводиться двічі. На другому вході встановлюється sseofпараметр, який дозволяє шукати, використовуючи часовий інтервал, виміряний від кінця. Звичайно, якщо не вказано інше, FFmpeg скидає часові позначки вводу, тому copytsвстановлено для збереження вхідного TS.

По-перше, логотип накладається на оброблене відео, а результат виходить накладеним на першому вході. Оскільки часові позначки збереглися, кадри вирівнюються і мета досягається.


Це досить милий трюк!
Ouroborus

Це спрацьовувало як шарм, дякую :) Тільки проблеми, які у мене все ще є, - це робота в партії з cms, з якою я працюю, але це не має нічого спільного з вашою відповіддю, яка просто працює!
razz

1

overlayі enableне мають можливості посилатися на кінець або тривалість відео. Вам потрібно буде скористатися додатковою командою (можливо, ffprobeта grep, як описано в цій відповіді ), щоб витягнути тривалість, а потім використовувати її для генерації ffmpegкоманди з потрібними betweenзначеннями.


Просто цікаво, чи все це можливо в одній команді? Скажімо, у мене є група 2000 відео і хочу запустити її за допомогою однієї команди?
razz

Немає потреби grep: ви можете користуватися ffprobeпоодинці. Дивіться одну з інших відповідей за посиланням, яке ви надали.
llogan

@razz Ви повинні зробити це з двох команд. Як згадував Оуробор, виконайте одну команду, використовуючи ffprobeдля визначення довжини, а потім ffmpegкоманду, використовуючи тривалість, з якої ви отримали ffprobe.
llogan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.