← Блог

Как объединять и склеивать видео с помощью FFmpeg (руководство 2026)

Полное руководство по объединению и склейке нескольких видеофайлов с помощью FFmpeg. Рассматриваются методы concat demuxer, filter, protocol, а также бесплатная альтернатива в один клик.

5 min read

Есть несколько видеоклипов, которые нужно объединить в один файл? FFmpeg предлагает несколько способов конкатенации видео — но правильный метод зависит от того, имеют ли ваши клипы одинаковый формат, кодек и разрешение.

Это руководство охватывает все три подхода с точными командами. А для тех, кто предпочитает не разбираться с несовместимостью кодеков в терминале, в конце есть бесплатная альтернатива с перетаскиванием.


Предварительные требования: установка FFmpeg

FFmpeg

macOS:

brew install ffmpeg

Ubuntu/Debian:

sudo apt update && sudo apt install ffmpeg

Windows: Скачайте с ffmpeg.org, распакуйте и добавьте bin в PATH.


Метод 1: Concat Demuxer (одинаковый формат — самый быстрый)

Это самый быстрый и простой метод. Он работает, когда все видео имеют одинаковый кодек, разрешение и частоту кадров.

Шаг 1: Создайте список файлов

Создайте текстовый файл files.txt:

file 'clip1.mp4'
file 'clip2.mp4'
file 'clip3.mp4'

Шаг 2: Выполните команду concat

ffmpeg -f concat -safe 0 -i files.txt -c copy output.mp4
  • -f concat — использовать concat demuxer
  • -safe 0 — разрешить абсолютные/относительные пути
  • -c copy — без перекодирования (мгновенно)

Автоматическое создание списка файлов

Linux/macOS:

for f in *.mp4; do echo "file '$f'" >> files.txt; done
ffmpeg -f concat -safe 0 -i files.txt -c copy output.mp4

Windows (PowerShell):

Get-ChildItem *.mp4 | ForEach-Object { "file '$($_.Name)'" } | Out-File -Encoding ascii files.txt
ffmpeg -f concat -safe 0 -i files.txt -c copy output.mp4

Метод 2: Concat Filter (разные форматы — максимальная гибкость)

Когда клипы имеют разные кодеки, разрешения или частоту кадров, необходим concat filter. Он перекодирует всё для соответствия.

Два видео:

ffmpeg -i clip1.mp4 -i clip2.mov \
  -filter_complex "[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[outv][outa]" \
  -map "[outv]" -map "[outa]" output.mp4

Три видео:

ffmpeg -i clip1.mp4 -i clip2.mov -i clip3.avi \
  -filter_complex "[0:v][0:a][1:v][1:a][2:v][2:a]concat=n=3:v=1:a=1[outv][outa]" \
  -map "[outv]" -map "[outa]" output.mp4
  • n=3 — количество входных сегментов
  • v=1 — один выходной видеопоток
  • a=1 — один выходной аудиопоток

Нормализация разрешения перед конкатенацией

Если клипы имеют разное разрешение, сначала масштабируйте их:

ffmpeg -i clip1.mp4 -i clip2.mp4 \
  -filter_complex \
    "[0:v]scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2[v0]; \
     [1:v]scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2[v1]; \
     [v0][0:a][v1][1:a]concat=n=2:v=1:a=1[outv][outa]" \
  -map "[outv]" -map "[outa]" output.mp4

Метод 3: Concat Protocol (только MPEG-TS)

Для транспортных потоков MPEG можно использовать протокол concat напрямую:

# Сначала конвертируйте в MPEG-TS
ffmpeg -i clip1.mp4 -c copy -bsf:v h264_mp4toannexb clip1.ts
ffmpeg -i clip2.mp4 -c copy -bsf:v h264_mp4toannexb clip2.ts

# Затем объедините
ffmpeg -i "concat:clip1.ts|clip2.ts" -c copy -bsf:a aac_adtstoasc output.mp4

Этот метод в целом больше не рекомендуется — concat demuxer (Метод 1) проще и надёжнее.


Специальные сценарии

Объединение видео и аудиодорожек

Совместите видеофайл с отдельным аудиофайлом:

ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -shortest output.mp4
  • -shortest — остановиться, когда закончится более короткий поток

Замена аудио в видео

ffmpeg -i video.mp4 -i new_audio.mp3 -c:v copy -c:a aac -map 0:v -map 1:a output.mp4

Конкатенация видео с разной частотой кадров

Принудительно задайте всем входным файлам 30 кадров/с перед конкатенацией:

ffmpeg -i clip1.mp4 -i clip2.mp4 \
  -filter_complex \
    "[0:v]fps=30[v0];[1:v]fps=30[v1]; \
     [v0][0:a][v1][1:a]concat=n=2:v=1:a=1[outv][outa]" \
  -map "[outv]" -map "[outa]" output.mp4

Видео без аудио

Если в некоторых клипах отсутствуют аудиодорожки, добавьте тишину:

ffmpeg -i clip_no_audio.mp4 -f lavfi -i anullsrc=r=44100:cl=stereo \
  -c:v copy -c:a aac -shortest clip_with_silence.mp4

Затем объедините как обычно.


Распространённые ошибки и их исправление

«Discarding non-monotonous DTS»

Временны́е метки не совпадают между клипами. Перекодируйте:

ffmpeg -f concat -safe 0 -i files.txt -c:v libx264 -c:a aac output.mp4

«Stream 0 codec does not match»

Ваши клипы имеют разные кодеки. Используйте concat filter (Метод 2) вместо concat demuxer.

«Discarding 1 additional packets» / проблемы синхронизации

Добавьте -fflags +genpts для повторной генерации временны́х меток:

ffmpeg -fflags +genpts -f concat -safe 0 -i files.txt -c copy output.mp4

В выходном файле чёрные кадры между клипами

Это происходит, когда клипы имеют разные форматы пикселей. Задайте общий формат принудительно:

ffmpeg -i clip1.mp4 -i clip2.mp4 \
  -filter_complex "[0:v]format=yuv420p[v0];[1:v]format=yuv420p[v1];[v0][0:a][v1][1:a]concat=n=2:v=1:a=1[outv][outa]" \
  -map "[outv]" -map "[outa]" output.mp4

Пропустите терминал: используйте WaveSpeed Desktop

Объединение видео с помощью FFmpeg означает выбор между тремя разными методами, создание списков файлов, устранение несовместимости кодеков, отладку проблем с временны́ми метками и написание строк filter_complex, которые выглядят как кошмарные регулярные выражения.

WaveSpeed Desktop включает встроенный Media Merger, который упрощает всё:

  • Перетащите ваши видеоклипы
  • Упорядочьте их по необходимости
  • Нажмите «Объединить» — один файл, готово

Разные форматы? Разные разрешения? Приложение обрабатывает это автоматически.

WaveSpeed Desktop Media Merger

Скачайте WaveSpeed Desktop бесплатно: https://github.com/WaveSpeedAI/wavespeed-desktop/releases


Часто задаваемые вопросы

Какой метод concat использовать? Если все клипы имеют одинаковый кодек и разрешение, используйте Метод 1 (demuxer) — он мгновенный. Если клипы чем-либо отличаются, используйте Метод 2 (filter).

Можно ли добавить переходы между клипами? FFmpeg поддерживает базовые переходы перекрёстного затухания с помощью фильтра xfade, но это сложно. Для переходов визуальный редактор обычно удобнее.

Снижает ли объединение видео качество? Нет, при использовании -c copy (Метод 1). При использовании concat filter (Метод 2) происходит перекодирование и возможна небольшая потеря качества. Используйте низкое значение CRF (18–20), чтобы минимизировать её.

Есть ли ограничение на количество объединяемых видео? В FFmpeg нет жёсткого ограничения. Практически, потребление памяти и время обработки растут пропорционально количеству входных файлов.

Поделиться