Быстрая обрезка и нарезка видео с помощью FFmpeg

Содержание
- Обрезка начала и конца видео
- Вырезка короткого фрагмента внутри видео
- Разбиение файла на равные сегменты
- Полезные советы, когда методы не сработают
- Альтернативные подходы и шпаргалка команд
Важно: прежде чем редактировать — всегда делайте резервную копию оригинального файла.
Обрезка начала и конца видео
Одна из ключевых возможностей FFmpeg — быстрая обрезка участков аудио- и видеозаписей. Это удобно для удаления лишних кадров в начале или конце клипа и автоматизации в скриптах.
Создайте резервную копию исходного файла:
cp ~/my-video.mp4 ~/my-video-backup.mp4Примеры рабочих команд (корректная синтаксис):
- Удалить первые 30 секунд из пятиминутного видео:
ffmpeg -ss 00:00:30 -to 00:05:00 -i my-video.mp4 -c copy my-video-trim.mp4- Удалить последние 30 секунд (оставить с начала до 4:30):
ffmpeg -ss 00:00:00 -to 00:04:30 -i my-video.mp4 -c copy my-video-trim.mp4- Удалить и начало, и конец (убрать первые и последние 30 секунд):
ffmpeg -ss 00:00:30 -to 00:04:30 -i my-video.mp4 -c copy my-video-trim.mp4Пояснения:
- Флаг -ss перед -i указывает стартовую точку чтения входа; -to указывает время окончания относительно начала файла. При использовании -c copy команда выполняет копирование без перекодирования (быстро), но точность может зависеть от ключевых кадров (keyframes).
- Для более точной обрезки по произвольным кадрам может потребоваться перекодирование (например, удалить -c copy и указать кодек: -c:v libx264 -c:a aac).
После выполнения сравните длину и воспроизведение нового файла с оригиналом в медиаплеере.

Вырезка короткого фрагмента внутри видео
FFmpeg позволяет выбирать и объединять несколько временных диапазонов из одного файла с помощью фильтров выборки (select/aselect) и коррекции тайминга (setpts/asetpts).
Создайте резервную копию снова, если ещё не сделали:
cp ~/my-video.mp4 ~/my-video-backup.mp4Откройте видео в плеере и зафиксируйте точные метки времени начала и окончания каждого фрагмента, которые хотите оставить. В примере возьмём два фрагмента: 2:30–4:00 и 7:45–8:30.
Для удобства можно перевести метки из формата ЧЧ:ММ:СС в секунды:
echo "00:02:30" | awk -F: '{ print ($1 * 3600) + ($2 * 60) + $3 }'Общий шаблон команды для выбора нескольких диапазонов (замените PLACEHOLDER на ваши значения в секундах):
ffmpeg -i my-video.mp4 \
-vf "select='between(t,FIRST_START,FIRST_END)+between(t,SECOND_START,SECOND_END)',setpts=N/FRAME_RATE/TB" \
-af "aselect='between(t,FIRST_START,FIRST_END)+between(t,SECOND_START,SECOND_END)',asetpts=N/SR/TB" \
my-video-cut.mp4Пример с числами (первые фрагмент 150–240 с, второй 465–510 с):
ffmpeg -i my-video.mp4 \
-vf "select='between(t,150,240)+between(t,465,510)',setpts=N/FRAME_RATE/TB" \
-af "aselect='between(t,150,240)+between(t,465,510)',asetpts=N/SR/TB" \
my-video-cut.mp4Пояснения:
- Фильтры select/aselect выбирают кадры/сэмплы в указанных интервалах, а setpts/asetpts пересчитывают временные метки, чтобы итоговый клип шел без «прыжков» времени.
- Если добавляете больше фрагментов, просто расширьте выражение внутри between(…) через +between(…).


Протестируйте результат и убедитесь, что звук и видео синхронизированы, особенно если вы применяли сложные фильтры.

Разбиение файла на равные сегменты
FFmpeg может автоматически разбить длинный ролик на несколько файлов одинаковой продолжительности. Это удобно для загрузки по частям или для обработки на слабом железе.
Перейдите в папку с видео и выполните команду:
ffmpeg -i my-video.mp4 -c copy -map 0 -segment_time 00:10:00 -f segment -reset_timestamps 1 my-video-%03d.mp4Замените значение segment_time на желаемую длительность, например 00:05:00 для пятиминутных фрагментов.

Примечание по точности:
- Команда ориентируется на ближайший ключевой кадр. В результате сегменты могут отличаться на несколько секунд от идеала. Для точного разреза потребуется перекодирование с переинициализацией GOP (Group of Pictures).
Когда описанные методы не сработают
- Видео использует контейнер или кодек с редкой разметкой ключевых кадров — копирование (-c copy) может дать «склеенные» сегменты с неидеальной границей. Решение: перекодировать фрагменты, добавив -c:v libx264 -crf 18 -c:a aac.
- Требуется точный разрез на кадре, не совпадающем с ключевым кадром — перекодируйте только короткий фрагмент вокруг границы.
- Аудио и видео расходятся после применения select/aselect — проверьте фильтры setpts/asetpts и частоту дискретизации (SR).
Альтернативные подходы
- Графические редакторы (Kdenlive, Shotcut): удобны для визуальной нарезки и точной подгонки, но менее автоматизируемы.
- FFmpeg с промежуточным перекодированием: вырезать с большим запасом и затем перекодировать результат с указанием точных кодеков и настроек качества.
- Комбинация: использовать ffmpeg для массовой нарезки, а графический редактор для тонкой правки одного–двух фрагментов.
Шпаргалка — часто используемые команды
- Получить информацию о файле:
ffprobe -show_format -show_streams my-video.mp4- Извлечь аудио в MP3:
ffmpeg -i my-video.mp4 -vn -c:a libmp3lame -q:a 2 audio.mp3- Перекодировать видео в H.264 с контролем качества:
ffmpeg -i my-video.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac out.mp4- Экспорт одного кадра (скриншот) в PNG на отметке 00:01:23:
ffmpeg -ss 00:01:23 -i my-video.mp4 -frames:v 1 shot.pngМини‑методология для выполнения задачи в 5 шагов
- Сделайте резервную копию исходного файла.
- Определите точные временные метки (плеер, ffprobe, awk).
- Выберите метод: copy (быстро) или перекодирование (точно).
- Выполните команду FFmpeg в тестовой директории.
- Проверьте результат в плеере и при необходимости уточните метки.
Роль‑ориентированная чек‑лист
- Для контент‑менеджера: подготовить метки времени, сохранить исходник, указать требуемую длину.
- Для техподдержки: протестировать 2–3 плеера, проверить субтитры и метаданные.
- Для видеоредактора: при необходимости доработать первый и последний кадры в графическом редакторе.
Факто‑бокс: ключевые моменты
- Копирование (-c copy) — быстро, без потерь, но зависит от ключевых кадров.
- Перекодирование — медленнее, обеспечивает точный разрез и униформный GOP.
- Разбиение сегментов опирается на ближайший ключевой кадр — отклонения возможны.
Краткая глоссарий — 1 строка на термин
- Keyframe: кадр, с которого декодирование может начаться без предыдущих кадров.
- GOP: группа изображений между ключевыми кадрами.
- setpts/asetpts: фильтры для пересчёта временных меток видео/аудио.
Критерии приёмки
- Видео начинается и заканчивается в нужных метках.
- Аудио синхронизировано и не содержит смещений.
- Формат и кодек соответствуют целевым требованиям (если нужно — проверить ffprobe).
Ресурсы и примечания
- Знание кодеков и битрейта помогает оптимизировать размер файлов при перекодировании.
- Можно конвертировать WebM в другие форматы с помощью ffmpeg, указав нужный кодек выходного файла.
Image credit: Sanjeev Nagaraj via Unsplash and Wikimedia Commons. All alterations and screenshots by Ramces Red.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента