Прямой ответ
Водяной знак накладывается фильтром наложения с указанием позиции, поэтому знак размещается в заданной области кадра и масштабируется относительно разрешения.
| Параметр | Что определяет |
|---|---|
| Позиция | Область кадра для размещения знака |
| Отступ | Расстояние от края кадра |
| Прозрачность | Степень видимости знака поверх кадра |
| Масштаб | Размер знака относительно разрешения |
ffmpeg -i input.mp4 -i logo.png \
-filter_complex "[1:v]format=rgba,colorchannelmixer=aa=0.5[w];[0:v][w]overlay=W-w-20:H-h-20" \
-c:a copy output.mp4
Знак масштабируется и размещается с отступом от края, поэтому позиция сохраняется при разном разрешении кадра. О командах — в статье про FFmpeg.
Позиция знака и отступ от края
Позиция определяет область кадра для размещения знака, поэтому отступ задаётся относительно размера кадра, а не в абсолютных значениях.
Область размещения. Знак размещается в выбранном углу либо области кадра, поэтому позиция задаётся выражением относительно ширины и высоты.
Отступ от края. Расстояние от границы кадра задаётся явно, поэтому знак не касается края изображения.
Зависимость от разрешения. Позиция, выраженная через размер кадра, сохраняется при ином разрешении, поэтому знак остаётся в той же области.
Практическое следствие: позиция, заданная абсолютными значениями пикселей, смещается при ином разрешении кадра, поэтому знак оказывается в иной области.
Отдельный аспект — соотношение сторон кадра. Изменение соотношения сторон меняет размеры кадра, поэтому позиция, выраженная через ширину и высоту, адаптируется автоматически.
Прозрачность и читаемость знака
Прозрачность определяет степень видимости знака поверх кадра, поэтому значение подбирается по требованию к читаемости и заметности.
Степень прозрачности. Значение альфа-канала определяет, насколько знак перекрывает кадр, поэтому знак виден, но не закрывает изображение.
Читаемость кадра. Знак с высокой непрозрачностью закрывает часть изображения, поэтому содержимое кадра читается хуже.
Контраст с кадром. Знак, совпадающий по цвету с фоном, не различим, поэтому контраст обеспечивается цветом либо подложкой.
Практическое следствие: знак с низкой непрозрачностью на светлом фоне не различим, поэтому назначение знака не выполняется.
Масштаб знака и проверка результата
Масштаб определяет размер знака относительно кадра, поэтому размер задаётся долей разрешения, а не фиксированным значением.
Относительный размер. Размер знака задаётся долей ширины кадра, поэтому соотношение сохраняется при ином разрешении.
Фиксированный размер. Знак заданного размера выглядит крупнее на кадре малого разрешения, поэтому восприятие различается.
Проверка результата. Кадр результата просматривается, поэтому позиция, размер и читаемость знака подтверждаются по факту.
Практическое следствие: проверка результата только по параметрам команды не подтверждает читаемость знака, поскольку видимость зависит от содержимого кадра.
О генерации превью — в статье про генерацию миниатюр; о параметрах сжатия — в статье про сжатие видео.
Знак на части длительности и смена позиции
Знак может отображаться не на всей длительности видео, поэтому период отображения задаётся условием по времени кадра.
Период отображения. Знак показывается в заданном интервале, поэтому часть видео остаётся без знака, а часть содержит его.
Смена позиции. Позиция знака меняется по времени, поэтому знак перемещается по кадру и не перекрывает одну область постоянно.
Условие по времени. Отображение задаётся выражением по времени кадра, поэтому период и позиция определяются одним правилом.
Практическое следствие: знак, отображаемый постоянно в одной позиции, перекрывает одну и ту же область кадра на всей длительности, поэтому часть содержимого закрыта всё время.
Отдельный аспект — влияние на объём. Наложение знака требует перекодирования видеопотока, поскольку кадр изменяется, поэтому объём результата зависит от параметров кодирования, а не от размера знака.
Практика: наложение водяного знака
1. Задавайте позицию относительно размера кадра. Знак остаётся в той же области при ином разрешении.
2. Указывайте отступ от края явно. Знак не касается границы кадра, поэтому изображение не обрезается знаком.
3. Масштабируйте знак долей разрешения. Соотношение размера знака и кадра сохраняется при ином разрешении.
4. Подбирайте прозрачность под читаемость кадра. Знак виден, но не закрывает содержимое изображения.
5. Обеспечивайте контраст знака с фоном. Знак различим на кадрах разного цвета.
6. Сохраняйте аудиопоток без перекодирования. Качество звука не меняется, поскольку декодирование не выполняется.
7. Проверяйте результат просмотром кадра. Позиция, размер и читаемость подтверждаются по факту.
Рекомендации:
- Не задавайте позицию абсолютными значениями пикселей. Позиция смещается при ином разрешении кадра.
- Учитывайте влияние непрозрачности на читаемость. Знак с высокой непрозрачностью закрывает часть изображения.
- Сопоставляйте размер знака с разрешением кадра. Фиксированный размер воспринимается по-разному на кадрах разного разрешения.
- Фиксируйте параметры наложения в скрипте. Повторная обработка даёт одинаковый результат для всего набора.
- Пересматриваем позицию при изменении формата кадра. Новое соотношение сторон требует иного выражения позиции.
Практический сценарий: знак смещался на видео иного разрешения
Контекст: водяной знак размещался корректно на видео одного разрешения, но оказывался в ином месте на файлах другого размера.
- Диагностика. Проверка показала, что позиция знака задавалась абсолютными значениями пикселей. На кадре большего разрешения знак оказывался ближе к центру, поскольку отступ не пересчитывался относительно размера.
- Причина. Позиция не выражалась через размер кадра, поэтому значение не адаптировалось к иному разрешению.
- Действия. (а) Заменили абсолютные значения позиции на выражение относительно ширины и высоты кадра, чтобы отступ пересчитывался; (б) задали масштаб знака долей разрешения, чтобы соотношение сохранялось; (в) подобрали прозрачность, чтобы знак был виден на кадрах разного цвета; (г) сохранили аудиопоток без перекодирования, чтобы качество звука не менялось; (д) проверили результат просмотром кадров из файлов разного разрешения.
- Результат. Знак размещается в одной и той же области кадра независимо от разрешения, поскольку позиция выражена относительно размера.
Вывод: позиция знака, заданная абсолютными значениями пикселей, смещается при ином разрешении кадра. Выражение позиции через ширину и высоту кадра и масштаб знака долей разрешения сохраняют размещение при любом размере изображения.
FAQ
Как задать позицию водяного знака, сохраняющуюся при разном разрешении? Выражением относительно ширины и высоты кадра. Абсолютные значения пикселей смещаются при ином разрешении.
Как подобрать прозрачность знака? По требованию к читаемости кадра. Знак должен быть виден, но не закрывать содержимое изображения.
Почему знак может быть не виден на части кадров? Цвет знака совпадает с фоном кадра. Контраст обеспечивается цветом знака либо подложкой.
Нужно ли перекодировать аудио при наложении знака? Нет, аудиопоток сохраняется копированием. Декодирование не выполняется, поэтому качество звука не меняется.
Источники: FFmpeg filters, FFmpeg documentation, ffprobe — ссылки в шапке.