Страница 1 из 1

применить фильтр только к определенному участку видео

Добавлено: 28 фев 2026, 16:47
ya
Для того чтобы применить фильтр только к определенному участку видео без предварительной нарезки файла, в FFmpeg существует встроенный параметр **`enable`**.

Этот параметр позволяет использовать так называемые «выражения временной шкалы» (timeline editing). Большинство популярных фильтров (например, `hue`, `drawtext`, `boxblur`, `curves`, `brightnes`, `negate` и др.) поддерживают эту функцию.

### Основной синтаксис

Вам нужно добавить условие `enable='between(t,start,end)'` внутри настроек самого фильтра.

```bash
ffmpeg -i input.mp4 -vf "filter_name=enable='between(t,10,20)'" -c:a copy output.mp4

```

* **`t`**: текущее время в секундах.
* **`10`**: время начала эффекта (в секундах).
* **`20`**: время окончания эффекта (в секундах).

---

### Примеры использования

#### 1. Сделать видео черно-белым с 5-й по 15-ю секунду

Для этого используется фильтр `hue` (насыщенность `s=0` делает изображение серым):

```bash
ffmpeg -i input.mp4 -vf "hue=s=0:enable='between(t,5,15)'" -c:a copy output.mp4

```

#### 2. Размытие (Blur) в конкретный момент

Если вы хотите скрыть что-то или создать эффект размытия с 30-й по 40-ю секунду:

```bash
ffmpeg -i input.mp4 -vf "boxblur=10:enable='between(t,30,40)'" -c:a copy output.mp4

```

#### 3. Наложение текста только на определенный интервал

```bash
ffmpeg -i input.mp4 -vf "drawtext=text='Привет!':x=50:y=50:fontsize=24:fontcolor=white:enable='between(t,2,7)'" output.mp4

```

---

### Продвинутые условия

Параметр `enable` поддерживает не только интервалы `between`, но и логические операторы:

| Условие | Описание |
| --- | --- |
| `between(t, 10, 20)` | Включить фильтр в интервале от 10 до 20 секунд. |
| `gt(t, 30)` | Включить фильтр после 30-й секунды и до конца видео. |
| `lt(t, 5)` | Включить фильтр только в первые 5 секунд. |
| `gte(t,10)*lte(t,20) + gte(t,40)*lte(t,50)` | Применить фильтр в двух разных промежутках времени. |

> **Важное примечание:** > При использовании `-vf` (видеофильтров) FFmpeg обязательно будет перекодировать видеопоток. «Склеить» фильтр с оригинальным потоком без перекодировки (используя `-c:v copy`) невозможно технически. Однако аудио можно оставить нетронутым с помощью `-c:a copy`.