Как конкатенировать видеофайлы в FFmpeg, если некоторые видео повернуты на -180°, а некоторые нет?

Как правильно объединить видео с разной ориентацией с GoPro с помощью FFmpeg

Многие владельцы камер GoPro сталкиваются с задачей объединения нескольких видеороликов в один файл для удобного архива и просмотра. При этом часто возникает проблема с разной ориентацией видео — некоторые видео могут иметь установленную в метаданных информацию о повороте (например, поворот на -180°), а другие — нет. В этой статье мы рассмотрим, почему стандартное объединение через FFmpeg иногда не срабатывает и как решить эту задачу эффективно.

Проблема с поворотом видео в метаданных

GoPro при записи может сохранять в метаданных видео параметр, отвечающий за ориентацию экрана — rotation (например, отображение поворота -180°). При объединении видео с разным значением этого параметра с помощью команды concat FFmpeg учитывает поворот только первого видеофайла, что приводит к неправильному положению следующих роликов. Например, если первый файл повернут на -180°, то остальные тоже «переворачиваются», и наоборот.

Почему concat не учитывает поворот после первого видео?

Дело в том, что параметр поворота видео — это глобальное значение для всего потокового файла (stream), а не для отдельных частей. FFmpeg не может сохранить несколько значений rotation внутри одного файла для разных участков видео. В итоге весь итоговый файл проигрывается с единственной ориентацией, заданной в первых метаданных.

Пробуем стандартные методы (и почему они не работают)

Самый простой способ объединения видео — использование команды:

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

где input.txt — список видеофайлов. Этот метод быстро объединяет ролики без перекодирования.

Однако если в метаданных разных видео разные настройки поворота, итог окажется некорректным.

Также попытки снимать метаданные поворота с помощью:

bash
ffmpeg -f concat -safe 0 -i input.txt -map_metadata -1 -c copy output.mkv

или установки параметров

bash
ffmpeg -display_rotation -180 -i input.mp4 output_fixed.mp4

как правило, не решают проблему, поскольку это не изменяет структуру видео, а лишь влияет на метаданные, которые concat игнорирует.

Как правильно объединить видео с разной ориентацией: hard rotate и перекодирование

Поскольку rotation — глобальное свойство видеофайла, чтобы объединить ролики с разной ориентацией, необходимо изменить сам видеопоток, а не только метаданные. Это делается через жёсткий поворот (hard rotate) каждого видео с помощью фильтров FFmpeg и перекодирования.

Например, можно использовать фильтр transpose:

bash
ffmpeg -i input1.mp4 -vf "transpose=2" -c:v libx264 -c:a copy rotated1.mp4

  • Параметр transpose задаёт поворот видео на 90° по часовой стрелке (1 — 90°, 2 — 270°, 3 — горизонтальное отражение + поворот).
  • После поворота видео будет иметь правильную ориентацию без необходимости полагаться на метаданные.

После поворота всех файлов к единой ориентации можно выполнить их объединение с помощью concat, уже без проблем с поворотом.

Итоговые рекомендации по объединению видео с GoPro:

  1. Проверьте ориентацию каждого видео, используя команды FFmpeg или просмотрщик свойств файла.
  2. "Жёстко" поверните видеофайлы, у которых задан rotation, через фильтр transpose с перекодированием.
  3. Создайте список файлов в формате input.txt для команды concat.
  4. Объедините все видео в один файл с помощью:

bash
ffmpeg -f concat -safe 0 -i input.txt -c copy output_final.mp4

  1. Если вас не устраивает перекодирование или вы хотите избежать потери качества, рассмотрите вариант архивирования исходных файлов в сжатый архив (zip, rar и т.д.) без объединения.

Заключение

Объединение видео с разных поворотом GoPro — нетривиальная задача из-за особенностей метаданных и формата MP4. Использование глобальных фильтров поворота с перекодированием — надёжный способ гарантировать правильную ориентацию итогового видео. Несмотря на необходимость повторного кодирования, этот метод решает проблему некорректного отображения и позволяет создать единый файл без искажений.


Ключевые слова для SEO: объединение видео GoPro, FFmpeg concat, вращение видео FFmpeg, hard rotate видео, поворот видео GoPro, объединить видео с разной ориентацией, FFmpeg видеофильтры, исправить поворот видео, как объединять видео GoPro, видеоархивирование.

Источник

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *