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

картинка в картинке

Добавлено: 05 мар 2026, 04:51
ya
Сделать эффект «картинка в картинке» (Picture-in-Picture) в FFmpeg можно с помощью фильтра `overlay`. Это мощный инструмент, который позволяет накладывать один видеопоток на другой с высокой точностью.

### Базовая команда

Самый простой вариант — поместить второе видео в левый верхний угол первого:

```bash

Код: Выделить всё

ffmpeg -i main_video.mp4 -i overlay_video.mp4 -filter_complex "overlay=10:10" output.mp4
```

### Как это работает:

* `-i main_video.mp4`: Основное (фоновое) видео.
* `-i overlay_video.mp4`: Видео, которое будет сверху.
* `-filter_complex`: Команда для сложных фильтров.
* `overlay=10:10`: Координаты $x$ и $y$ для верхнего левого угла накладываемого видео (в пикселях).

---

### Продвинутые варианты размещения

Чтобы не высчитывать пиксели вручную, можно использовать встроенные переменные:

| Положение | Команда (параметр overlay) |
| --- | --- |
| **Справа вверху** | `overlay=W-w-10:10` |
| **Справа внизу** | `overlay=W-w-10:H-h-10` |
| **Слева внизу** | `overlay=10:H-h-10` |
| **По центру** | `overlay=(W-w)/2:(H-h)/2` |

> **Пояснение переменных:**
> * `W`, `H` — ширина и высота основного видео.
> * `w`, `h` — ширина и высота накладываемого видео.
> * `10` — это небольшой отступ от края (можно менять).
>
>

---

### Изменение размера «картинки в картинке»

Обычно накладываемое видео слишком большое. Его нужно уменьшить перед наложением. Для этого мы сначала пропускаем второе видео через фильтр `scale`:

```bash

Код: Выделить всё

ffmpeg -i main_video.mp4 -i overlay_video.mp4 -filter_complex "[1:v]scale=400:-1[inner]; [0:v][inner]overlay=W-w-20:H-h-20" output.mp4
```

**Разбор цепочки:**

1. `[1:v]scale=400:-1[inner]`: Берем второе видео (`1:v`), меняем его ширину до 400 пикселей (высота подберется автоматически для сохранения пропорций) и называем этот результат `[inner]`.
2. `[0:v][inner]overlay...`: Берем основное видео (`0:v`) и накладываем на него наш уменьшенный фрагмент `[inner]`.

---

### Что делать со звуком?

По умолчанию FFmpeg возьмет аудиодорожку только из первого видео. Если вам нужно смешать звук из обоих роликов, добавьте фильтр `amix`:

```bash

Код: Выделить всё

ffmpeg -i main_video.mp4 -i overlay_video.mp4 -filter_complex "[1:v]scale=320:-1[inner]; [0:v][inner]overlay=W-w-10:10[outv]; [0:a][1:a]amix=inputs=2[outa]" -map "[outv]" -map "[outa]" output.mp4
```

### Полезный совет

Если видео имеют разную частоту кадров или формат, добавление `-shortest` в конце команды заставит FFmpeg завершить кодирование, как только закончится самое короткое видео.