# Как обрезать видео без потери качества в FFmpeg GUI на Windows: установка и настройка

> AI Release · @ai_release1 · https://ai-release.org/guides/kak-obrezat-video-bez-poteri-kachestva-v-ffmpeg-gui-na.html

## TL;DR

- Время выполнения: 20–30 минут на первую настройку, 1–2 минуты на каждую последующую обрезку
- Уровень сложности: Basic
- Понадобится: Windows 10/11 x64; сборка FFmpeg (`ffmpeg.exe`, `ffprobe.exe`); GUI-оболочка, которая умеет копировать потоки и принимать произвольные аргументы; свободное место не меньше размера вырезаемого фрагмента

Ключевой момент, которого нет в типовых инструкциях: «без потери качества» означает не галочку «высокое качество» в GUI, а режим `-c copy` (stream copy — копирование пакетов без декодирования и повторного кодирования). В этом режиме FFmpeg физически не трогает кадры, поэтому качество равно исходнику, но точка реза привязывается к ключевому кадру (keyframe — опорный кадр, с которого декодер может начать работу без предыдущих кадров), и начало может «уехать» на секунды.

Вторая неочевидная вещь: GUI-оболочки по умолчанию включают перекодирование (пресет, CRF, битрейт), и «обрезка» превращается в повторное сжатие. Проверять нужно не настройки, а строку лога `Stream #0:0 -> #0:0 (copy)` — если там `(h264)` или `(libx264)`, видео перекодируется.

## Требования и подготовка
![Иллюстрация к разделу «Требования и подготовка»](https://ai-release.org/guides/img/kak-obrezat-video-bez-poteri-kachestva-v-ffmpeg-gui-na-ru-1.jpg?v=1794646373)


- Windows 10 или 11 x64. Разрядность: `Параметры → Система → О системе`. Другие приёмы работы с системными параметрами Windows 11 — в гайде [Как использовать ИИ-поиск в Windows 11: команды и настройка](https://ai-release.org/guides/kak-ispolzovat-ii-poisk-v-windows-11-komandy-i-nastroyk.html?utm_source=tg&utm_medium=channel&utm_campaign=guide_inline&utm_content=guide_to_guide).
- Сборка FFmpeg: нужны оба файла, `ffmpeg.exe` и `ffprobe.exe`. Номер версии не фиксируем — берите актуальную сборку со страницы загрузки, сверьтесь с документацией.
- GUI-оболочка с двумя обязательными возможностями: режим stream copy и поле произвольных аргументов (`Custom parameters`, `Additional arguments`, `Дополнительные параметры` — название зависит от программы). Конкретные названия и версии оболочек сверьте с документацией выбранной программы.
- Права: запись в `C:\ffmpeg` и в пользовательскую переменную `PATH`. Права администратора нужны только при установке в системную папку.
- Аппаратный кодировщик (NVENC/QSV/AMF) не требуется: при копировании потоков он не участвует.
- Исходник — целый файл mp4/mov/mkv с H.264/H.265. Повреждённые и недокачанные файлы копирование переносят «как есть», вместе с дефектами.

**Пример:** проверка, что архив распакован правильно — в папке `C:\ffmpeg\bin` лежат `ffmpeg.exe`, `ffprobe.exe`, `ffplay.exe`.

## Шаг 1. Установка FFmpeg и привязка GUI к бинарнику

**Что сделать:** распаковать архив в `C:\ffmpeg`, добавить `C:\ffmpeg\bin` в переменную `PATH`, перезапустить терминал и GUI, указать в настройках оболочки путь к `ffmpeg.exe`.

**Зачем:** GUI не содержит кода FFmpeg — он вызывает `ffmpeg.exe` как внешний процесс. Если бинарник не в `PATH` и не прописан в настройках, оболочка не запустит ни одну задачу.

**Как проверить:** команды ниже должны вернуть пути и строку версии.

```powershell
Expand-Archive -Path "$env:USERPROFILE\Downloads\ffmpeg.zip" -DestinationPath "C:\ffmpeg"
[Environment]::SetEnvironmentVariable("Path", [Environment]::GetEnvironmentVariable("Path","User") + ";C:\ffmpeg\bin", "User")
```

Закройте окно PowerShell, откройте заново и выполните:

```powershell
where.exe ffmpeg
ffprobe -version
```

**Пример вывода:**

```
C:\ffmpeg\bin\ffmpeg.exe
ffprobe version ... Copyright (c) 2007-... the FFmpeg developers
```

Почему это работает: `where.exe` ищет исполняемый файл по путям из `PATH`, а `ffmpeg` при старте печатает баннер с версией и списком включённых библиотек — значит, бинарник запускается.

**Пример:** в GUI-оболочке откройте `Настройки → Путь к FFmpeg` и впишите `C:\ffmpeg\bin\ffmpeg.exe`. После сохранения перезапустите программу: путь читается при старте.

## Шаг 2. Сборка пресета обрезки без перекодирования
![Иллюстрация к разделу «Шаг 2. Сборка пресета обрезки без перекодирования»](https://ai-release.org/guides/img/kak-obrezat-video-bez-poteri-kachestva-v-ffmpeg-gui-na-ru-2.jpg?v=1794646379)


**Что сделать:** сначала узнать, где в файле лежат ключевые кадры, затем собрать строку аргументов и вставить её либо в PowerShell, либо в поле произвольных аргументов GUI.

**Зачем:** без списка keyframe нельзя предсказать, где реально начнётся вырезанный фрагмент. `-map 0` сохраняет все дорожки (видео, несколько аудио, субтитры), иначе FFmpeg оставит только по одной «лучшей» дорожке каждого типа.

**Как проверить:** в логе FFmpeg должна появиться строка `(copy)`.

```powershell
ffprobe -v error -select_streams v:0 -skip_frame nokey -show_entries frame=pts_time -of csv=p=0 "C:\video\input.mp4"
```

**Пример вывода** (числа у вас будут другими — это метки времени ключевых кадров в секундах):

```
0.000000
4.170000
8.340000
```

Сама обрезка — с 90-й секунды, длительностью 75 секунд:

```powershell
ffmpeg -ss 00:01:30.000 -i "C:\video\input.mp4" -t 00:01:15.000 -map 0 -c copy -avoid_negative_ts make_zero "C:\video\cut.mp4"
```

**Пример вывода в логе:**

```
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
```

Почему это работает: `-ss` перед `-i` — быстрый поиск по ключевым кадрам, `-t` задаёт длительность фрагмента (надёжнее, чем `-to`, который зависит от способа отсчёта метки), `-c copy` копирует пакеты, `-avoid_negative_ts make_zero` убирает отрицательные метки времени, из-за которых плееры показывают рассинхрон.

| Режим | Аргументы | Качество видео | Точность реза |
|---|---|---|---|
| Копирование потоков | `-map 0 -c copy` | идентично исходнику | по ключевому кадру |
| Перекодирование | `-c:v libx264 -crf 18` | зависит от CRF | покадровая |
| Видео копируется, звук перекодируется | `-c:v copy -c:a aac` | видео идентично | по ключевому кадру |

**Пример:** в GUI-оболочке поле «Дополнительные параметры» заполняется так: `-ss 00:01:30.000 -t 00:01:15.000 -map 0 -c copy -avoid_negative_ts make_zero`, а входной и выходной файлы выбираются штатными полями. Если оболочка сама добавляет `-c:v libx264` после вашего текста, её аргументы перекрывают ваши — уберите пресет кодирования в настройках.

## Где обрезка копированием не сработает

- Точный рез «в кадр» без перекодирования невозможен: если нужен кадр между ключевыми, придётся перекодировать голову фрагмента или принять сдвиг.
- Несовместимый контейнер: например, дорожка PCM в mp4 — копирование упадёт с ошибкой тега кодека.
- Файлы MPEG-TS и повреждённые записи: после копирования возможны ошибки меток времени и «залипание» первых секунд.
- Несколько дорожек с разной длиной: копирование сохранит их как есть, включая рассинхрон, который был в исходнике.

## Шаг 3. Проверка результата: кодеки, битрейт, длительность
![Иллюстрация к разделу «Шаг 3. Проверка результата: кодеки, битрейт, длительность»](https://ai-release.org/guides/img/kak-obrezat-video-bez-poteri-kachestva-v-ffmpeg-gui-na-ru-3.jpg?v=1794646387)


**Что сделать:** снять ffprobe-параметры с исходника и с результата, сравнить видеохарактеристики, проиграть первые и последние 5 секунд.

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

**Как проверить:** выполните команду для обоих файлов.

```powershell
ffprobe -v error -select_streams v:0 -show_entries stream=codec_name,width,height,bit_rate -show_entries format=duration -of default=noprint_wrappers=1 "C:\video\cut.mp4"
```

**Пример вывода:**

```
codec_name=h264
width=1920
height=1080
bit_rate=8451233
duration=75.033333
```

| Параметр | Исходник | Результат | Что должно быть |
|---|---|---|---|
| `codec_name` | h264 | h264 | совпадает |
| `bit_rate` | 8451233 | 8451233 | совпадает с точностью до округления метаданных |
| `width`/`height` | 1920×1080 | 1920×1080 | совпадает |
| `duration` | 600.0 | ≈75.0 | равно `-t` ± длительность одного GOP |

- [ ] В логе FFmpeg есть `(copy)` для видеопотока
- [ ] `codec_name`, `width`, `height` до и после совпадают
- [ ] `bit_rate` видео не изменился
- [ ] Длительность результата равна заданной с точностью до одного интервала ключевых кадров
- [ ] Первые и последние 5 секунд проигрываются без артефактов и рассинхрона звука

## Возможные проблемы и решения

**Проблема. GUI не запускает задачу, хотя FFmpeg установлен**

- Ошибка: `'ffmpeg' is not recognized as an internal or external command, operable program or batch file.`
- Причина: `C:\ffmpeg\bin` не попал в `PATH`, либо GUI был запущен до изменения переменной и держит старую копию окружения.
- Решение: проверьте `where.exe ffmpeg`; если путь пустой — повторите команду из Шага 1, закройте и откройте GUI заново, а в настройках оболочки пропишите полный путь `C:\ffmpeg\bin\ffmpeg.exe`.

**Проблема. Задача завершается, но выходной файл не создаётся**

- Ошибка: `Output file #0 does not contain any stream`
- Причина: `-ss` больше длительности исходника, либо `-map 0` указан после имени выходного файла — тогда FFmpeg не видит карту потоков.
- Решение: проверьте длительность (`ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "C:\video\input.mp4"`) и перенесите `-map 0` перед выходным файлом.

**Проблема. Копирование падает на дорожке, которая «не влезает» в контейнер**

- Ошибка: `Could not find tag for codec pcm_s16le in stream #1, codec not currently supported in container`
- Причина: видео копируется в mp4, а аудиодорожка в исходнике в формате, который mp4 не поддерживает (частый случай — mkv с PCM).
- Решение: смените контейнер на `.mkv` либо перекодируйте только звук: `ffmpeg -ss 00:01:30.000 -i "C:\video\input.mkv" -t 00:01:15.000 -map 0 -c:v copy -c:a aac -b:a 192k "C:\video\cut.mp4"`.

## Резюме и следующие шаги

Настройка закончена: у вас есть пресет, который копирует потоки и режет по ключевым кадрам без перекодирования, и способ проверить это по логу и ffprobe. Дальше имеет смысл собрать второй пресет — для сжатия с `-crf`, а если на этом же ПК вы запускаете локальные модели, пригодится гайд [Как ускорить DeepSeek с помощью DeepInfer: установка и настройка инференса](https://ai-release.org/guides/kak-uskorit-deepseek-s-pomoschyu-deepinfer-ustanovka-i.html?utm_source=tg&utm_medium=channel&utm_campaign=guide_inline&utm_content=guide_to_guide).

## FAQ

**Можно ли обрезать видео без потери качества вообще?**
Да, если не перекодировать: `-c copy` копирует сжатые пакеты, качество остаётся бит-в-бит исходным. Ограничение — точка реза привязывается к ключевому кадру.

**Почему вырезанный файл начинается на пару секунд раньше или позже заданного времени?**
Потому что при копировании FFmpeg не может начать с середины GOP (группы кадров между ключевыми). Сдвиг равен расстоянию до ближайшего ключевого кадра — его видно командой `ffprobe -skip_frame nokey` из Шага 2.

**Как получить точный рез до кадра?**
Только перекодированием фрагмента (`-c:v libx264 -crf 18`), что уже не является копированием. Компромисс — перекодировать первые 1–2 секунды (smart cut) отдельной сборкой, это делается вне GUI.

**GUI не даёт вставить аргументы — что делать?**
Возьмите оболочку с полем произвольных аргументов и режимом stream copy; если такой возможности нет, выполняйте команду из Шага 2 в PowerShell вручную — результат идентичен.
