суббота, 2 мая 2020 г.

Как соединить два файла MP4 с помощью FFMPEG


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

Система Android имеет ограничения на размер создаваемого файла в 4 Гб. И, например, при записи видео с параметрами 4K - разрешение, 30fps - фреймрейт, 48Mbps - битрейт, через примерно 12 минут размер файла превысит 4 Гб. После этого приложение для видеозаписи сохранит видео файл с соответствующим именем в файловой системе, и откроет другой файл для записи - без информирования пользователя об этих процессах.

Также нужно отметить, что Android не предоставляет (пока) встроенного инструмента для "склеивания" файлов более 4 Гб и для этого приходится использовать сторонние приложения.


В моём случае для "склеивания" двух объёмных видео файлов я использую кроссплатформенную утилиту FFMPEG.


Последовательность действий для файлов формата MP4 такая:

  1. Сохранить видео файлы на компьютер. Удобнее и быстрее всего это делать подключив смартфон по USB к компьютеру, после чего выбрать в настройках подключения USB передачу файлов.
  2. Открыть терминал и перейти в каталог с загруженными видео файлами.
  3. Для удобства просмотра и редактирования команды, выведем листинг файлов в каталоге:

    ls -la
  4. Выполним одну за другой команды для создания промежуточных файлов:

    ffmpeg -i input-1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate1.ts
    ffmpeg -i input-2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate2.ts


    где input-1.mp4 и input-2.mp4 - входные видео файлы, а intermediate1.ts и intermediate2.ts - промежуточные файлы.
  5. Выполним команду конкатенации (склеивания, слияния) двух файлов:

    ffmpeg -i "concat:intermediate1.ts|intermediate2.ts" -c copy -bsf:a aac_adtstoasc output.mp4


    где output.mp4 - результирующий файл.


Несколько замечаний:
  • Файловая система на вашем компьютере должна поддерживать объекты более 4 Гб. Современные файловые системы поддерживают создание таких объектов.
  • Нежелательно проводить перед конкатенацией другие операции над файлами. Это лучше сделать после создания результирующего файла. В противном случае вы можете получить рассинхронизированный результирующий файл.
  • В версии Android 11 ограничение в 4 Гб на размер создаваемого файла будет снято. 32 битная архитектура будет заменена 64 битной. Во время тестирования был успешно создан файл размером около 32 Гб.
  • При работе утилиты FFMPEG достаточно сильно нагружаются ресурсы компьютера. Загрузка CPU приближается к 100%. На ноутбуке это приводит к долговременному нагреву CPU до температуры около 83 градусов, при этом охлаждающий процессор кулер работает на оборотах примерно в 3000 RPM. Чтобы избежать нагрузки на CPU можно применить флаг -threads, например -threads 2, в таком случае, если вы имеете 8 тредов, задействованы будут 2.




Основная информация была взята с сайта Стэковерфлоу.


Комментариев нет:

Отправить комментарий