применить фильтр только к определенному участку видео
Добавлено: 28 фев 2026, 16:47
Для того чтобы применить фильтр только к определенному участку видео без предварительной нарезки файла, в 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`.
Этот параметр позволяет использовать так называемые «выражения временной шкалы» (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`.