Объединение видео 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, сохраняя важные метаданные и телеметрию. Важно помнить о возможных проблемах, связанных с временными метками, и уметь их решать, извлекая и добавляя метаданные. Теперь вы сможете создавать качественные и сохраненные видео без потери информации!