FFmpeg: как объединить несколько входных файлов в одно видео

Чтобы объединить несколько входных файлов с помощью FFmpeg, вы можете использовать различные методы. Вот несколько подходов, которые вы можете рассмотреть:

  1. Метод объединения:

    • Если входные файлы имеют одинаковый формат и параметры кодека, вы можете объединить их с помощью демультиплексора concat. Сначала создайте текстовый файл (например, input.txt), в котором будут перечислены пути к файлам в желаемом порядке:
      file '/path/to/input1.mp4'
      file '/path/to/input2.mp4'
      file '/path/to/input3.mp4'

      Затем выполните команду FFmpeg:

      ffmpeg -f concat -i input.txt -c copy output.mp4

      Этот метод подходит для файлов одного формата и кодека.

  2. Метод комплексного графа фильтров:

    • Если входные файлы имеют разные форматы, кодеки или вам необходимо применить дополнительные фильтры, вы можете использовать сложный граф фильтров. Этот метод позволяет вам манипулировать каждым входом индивидуально и комбинировать их. Например:
      ffmpeg -i input1.mp4 -i input2.webm -filter_complex "[0:v]scale=640:480[v0]; [1:v]scale=640:480[v1]; [v0][0:a][v1][1:a]concat=n=2:v=1:a=1[outv][outa]" -map "[outv]" -map "[outa]" output.mp4

      Этот метод обеспечивает большую гибкость, но требует понимания синтаксиса графа фильтров.

  3. Метод наложения:

    • Если вы хотите наложить несколько видео друг на друга, вы можете использовать фильтр наложения. Этот метод позволяет расположить входные видео в определенном макете. Например:
      ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[0:v][1:v]overlay=main_w-overlay_w-10:main_h-overlay_h-10[outv]" -map "[outv]" output.mp4

      Этот метод полезен для создания эффектов «картинка в картинке» или видеоколлажа.

  4. Метод потокового копирования:

    • Если вам нужно только объединить аудио- или видеопотоки из разных файлов без перекодирования, вы можете использовать метод копирования потока. Например, чтобы объединить аудиопотоки двух файлов:
      ffmpeg -i input1.mp4 -i input2.mp4 -c copy -map 0:a -map 1:a output.mp4

      Аналогично вы можете использовать -map 0:vи -map 1:vдля объединения видеопотоков.