Лучший способ сделать это в настоящее время - использовать демоверсию concat . Сначала создайте файл с именем inputs.txt
отформатированный так:
file '/path/to/input1.mp4' file '/path/to/input2.mp4' file '/path/to/input3.mp4'
Затем просто запустите эту команду ffmpeg:
ffmpeg -f concat -i inputs.txt -c copy output.mp4
Смотрите также объединение в ffmpeg
FAQ .
Я оставляю здесь следующее для пользы тех, кто использует более старые версии ffmpeg.
Последние версии ffmpeg могут сделать это: сначала вам нужно будет смешать файлы в транспортные потоки mpeg (достаточно легкие для процессора, так как это только меняет формат контейнера):
ffmpeg -i input.mp4 -map 0 -c copy -f mpegts -bsf h264_mp4toannexb middle.ts
Если это выдает ошибку о h264, вам может потребоваться использовать:
ffmpeg -i input.mp4 -map 0 -c copy -f mpegts -bsf h264_mp4toannexb middle.ts
Вам придется делать это отдельно с каждым входным файлом. Чтобы объединить файлы вместе, используйте:
ffmpeg -i "concat:middle1.ts|middle2.ts|middle3.ts" -c copy output.mp4
Если это выдает ошибку о AAC, возможно, вам придется использовать
ffmpeg -i "concat:middle1.ts|middle2.ts|middle3.ts" -c copy -absf aac_adtstoasc output.mp4
Если ваша система поддерживает именованные каналы, вы можете сделать это без создания промежуточных файлов.
mkfifo temp0 temp1
Вам нужно будет сделать следующее в трех отдельных виртуальных терминалах:
ffmpeg -i input0.mp4 -map 0 -c copy -f mpegts -bsf h264_mp4toannexb -y temp0 ffmpeg -i input1.mp4 -map 0 -c copy -f mpegts -bsf h264_mp4toannexb -y temp1 ffmpeg -f mpegts -i "concat:temp0|temp1" -c copy -absf aac_adtstoasc output.mp4
Если output.mp4 уже существует, третий ffmpeg спросит вас, хотите ли вы перезаписать его, но он сделает это после того, как получит доступ к FIFO, и это приведет к первому закрытию ffmpegs. Поэтому убедитесь, что вы выбрали неиспользуемое имя для выходного файла.
Это может не сработать, если ваши входные файлы отличаются - я считаю, что различия в битрейте в порядке, но размер кадра, частота кадров и т. Д. Должны совпадать.