Может ли накладываемый PNG водяной знак вращаться со временем?

Вопрос или проблема

У меня сейчас есть водяной знак, который прыгает внутри видео с этим ужасным куском кода внутри filter_complex

overlay=x='if(gte(mod(t*100, (W-w)*2), W-w), (W-w)*2 - mod(t*100, (W-w)*2), mod(t*100, (W-w)*2))'
       :y='if(gte(mod(t*100, (H-h)*2), H-h), (H-h)*2 - mod(t*100, (H-h)*2), mod(t*100, (H-h)*2))'

Я хотел бы сделать так, чтобы он вращался по отношению ко времени.

Я обнаружил, что при определении элемента overlay я могу применить ‘rotate=2’ или что-то в этом роде, чтобы повернуть его один раз, и он остается таким образом, пока прыгает по экрану.

Если я попробую rotate="PI*t", это ничего не делает (но, что удивительно, не выдает ошибку по поводу t). Думаю, меня не удивляет, что это не работает, но меня удивляет, что программа не жалуется на мой t.

Если вместо этого я пытаюсь добавить rotate="PI*t" в той же секции, где я указываю overlay, какие x и y использовать (где я мог бы ожидать, что это сработает, поскольку t там явно понятен), это выдает ошибку – Option 'rotate' not found

Возможно ли это сделать в команде ffmpeg, или мне нужно сделать анимированный файл водяного знака apng/avif вместо этого?

(У меня относительно старая версия ffmpeg, 5.1.6. Буду рад перейти на более новую версию, если это относительно просто – я использую CentOS Stream 9.)

Ответ или решение

Вопрос о создании вращающегося по времени водяного знака в виде изображения PNG поверх видео материала открывает интересные возможности в области обработки видео с использованием FFmpeg. Рассмотрим теоретические аспекты, применим конкретные примеры и обсудим возможные подходы к решению задачи.

Теория

FFmpeg является мощным инструментом командной строки для обработки мультимедийных данных. Он поддерживает множество фильтров, которые позволяют изменять и комбинировать аудио и видео. В контексте вашего вопроса особенно интересен фильтр overlay, который позволяет накладывать одно изображение или видео на другое. Однако базовая функциональность фильтра ограничена статическими наложениями без динамических изменений. Вы хотите сделать водяной знак не только плавающим, но и вращающимся в зависимости от времени.

Фильтр, который стоит изучить для вращения, — это rotate. Однако ключевое ограничение здесь заключается в том, что фильтр overlay не поддерживает динамическую модификацию параметра rotate напрямую. Причиной ограничений вашей реализации может быть устаревшая версия FFmpeg, и отсутствие поддержки динамического вращения в данной версии.

Пример

Чтобы добиться вращения водяного знака, можно использовать отдельный фильтр для обработки самого водяного знака перед его наложением на видео. Например, использовать фильтр rotate специально для кадрирования водяного знака, а затем наложить его с использованием overlay. Добавление времени в уравнение вращения требует от нас использования выражений, таких как PI*t, и именно это может вызвать затруднения при использовании в старых версиях FFmpeg.

Пример команды FFmpeg с динамическим наложением и вращением выглядит следующим образом:

ffmpeg -i input.mp4 -i watermark.png -filter_complex "[1:v]rotate=PI*t:c=none,overlay=W-w-10:H-h-10" output.mp4

В этой команде rotate=PI*t рассчитан на вращение изображения второго входа (водяного знака) со скоростью переменной t, что соответствует текущему времени.

Применение

Переход на более новую версию или изучение возможностей вашей текущей версии FFmpeg позволит реализовать данное динамическое наложение более эффективно. Например, обновление до более новой версии может предложить больше опций вращения и компоновки фильтров. Установить последнюю версию FFmpeg на CentOS Stream 9 можно следующими командами:

sudo dnf install epel-release
sudo dnf config-manager --set-enabled powertools
sudo dnf install ffmpeg ffmpeg-devel

После обновления, настройте вашу команду, чтобы использовать выражения, возможно разделив процесс водяного знака на несколько этапов: сначала изменение изображения, используя фильтрацию, затем наложение конечного результата.

Если ваша рабочая среда не позволяет легко обновляться, один альтернативный подход — создание динамически вращающейся анимации водяного знака в формате, который поддерживает анимацию, например, APNG или AVIF. Это позволяет избежать взаимодействия с ограничениями версии FFmpeg и воспользоваться преимуществами других инструментов для анимации.

В заключение, задача динамического вращения водяного знака является достижимой с использованием FFmpeg, хотя может потребовать адаптации или обновления используемых инструментов и версий. Удачное решение этого вопроса расширит возможности оформления вашего видео и его адаптации под нужды и стилистику конечного пользователя.

Оцените материал
Добавить комментарий

Капча загружается...