Исправление ошибки FFmpeg «Продолжительность приложения превышает диапазон формата mov/mp4» при объединении видео GoPro

Объединение видео GoPro с использованием FFmpeg: Полное руководство

Если вы занимаетесь редактированием видео и используете камеру GoPro, вы, вероятно, столкнулись с задачей объединения нескольких видеофайлов в один без потери качества. В данной статье мы рассмотрим, как это сделать с помощью FFmpeg, а также разберем проблемы и способы их решения.

Как объединить два видео с помощью FFmpeg

Для того чтобы объединить два видеофайла, вам потребуется создать текстовый файл, который будет содержать список файлов для конкатенации. В нашем случае текстовый файл будет называться list_videos.txt и содержать следующее:

file 'a.MP4'
file 'b.MP4'

Затем выполните следующую команду для объединения видео:

ffmpeg -safe 0 -f concat -i "list_videos.txt" -map 0:v -map 0:a -map 0:3 -copy_unknown -tag:2 gpmd -c copy "ab.mp4"

Эта команда успешно объединяет файлы и сохраняет телеметрическую информацию, благодаря параметрам -map и -copy_unknown.

Сохранение первых 10 секунд видео

Если вам нужно сохранить лишь первые 10 секунд одного из видео, вы можете использовать следующую команду:

ffmpeg -sseof -10 -i a.MP4 -map 0:v -map 0:a -map 0:3 -copy_unknown -tag:2 gpmd -tag:3 gpmd -c copy a_only_the_first_10secs.MP4

Эта команда извлечет последние 10 секунд из файла a.MP4. Однако, при попытке объединить получившийся файл a_only_the_first_10secs.MP4 с b.MP4, возникает ошибка:

[mp4 @ ...] Application provided duration: ... is out of range for mov/mp4 format

Причина ошибки и как ее исправить

Проблема говорит о том, что один из потоков не имеет временной метки, что вызывает сбой при попытке объединить файлы. Чтобы решить эту проблему, можно извлечь метаданные из оригинальных файлов, объединить их и затем добавить обратно в финальный файл.

Извлечение метаданных

Первым делом извлеките каждый поток метаданных следующим образом:

ffmpeg -i a.MP4 -map 0:2 -f ffmetadata a_gpmd1.txt
ffmpeg -i a.MP4 -map 0:3 -f ffmetadata a_gpmd2.txt

Создайте файл с объединением извлеченных метаданных:

type a_gpmd1.txt a_gpmd2.txt > a_metadata.txt

Повторите эти шаги для файла b.MP4, чтобы создать b_metadata.txt.

Теперь объедините два файла метаданных в один:

type a_metadata.txt b_metadata.txt > final_metadata.txt

Финальные шаги: Конкатенация и добавление метаданных

Теперь вы можете извлечь первые 10 секунд из видео a.MP4:

ffmpeg -i a.MP4 -to 00:00:10 -map 0:v -map 0:a -c copy a_first_10secs.MP4

После этого выполните конкатенацию:

ffmpeg -safe 0 -f concat -i "list_videos.txt" -map 0:v -map 0:a -c copy "concatenated.mp4"

И наконец, добавьте метаданные обратно в финальный выходной файл:

ffmpeg -i "concatenated.mp4" -i final_metadata.txt -map_metadata 1 -c copy "final_output.mp4"

Заключение

С помощью FFmpeg вы можете легко объединить видеофайлы GoPro, сохраняя важные метаданные и телеметрию. Важно помнить о возможных проблемах, связанных с временными метками, и уметь их решать, извлекая и добавляя метаданные. Теперь вы сможете создавать качественные и сохраненные видео без потери информации!

Источник

Ответить

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