Извлечение последних секунд видео GoPro с помощью FFmpeg
Введение
Владельцы камер GoPro часто сталкиваются с необходимостью редактирования своих видеофайлов. Одной из распространенных задач является извлечение последних нескольких секунд видео с сохранением телеметрии и порядка потоков. В этой статье мы рассмотрим, как правильно это сделать с помощью инструмента FFmpeg.
Структура потоков видео GoPro
В видеофайлах GoPro содержится несколько потоков, каждый из которых несет разную информацию:
- Поток #0:0: Видео (кодек hevc)
- Поток #0:1: Аудио (кодек aac)
- Поток #0:2: Данные: нет (tmcd)
- Поток #0:3: Данные: bin_data (gpmd)
Важным аспектом является то, что при работе с потоками необходимо сохранять порядок и целостность телеметрических данных.
Использование FFmpeg для извлечения последних секунд видео
Чтобы извлечь последние несколько секунд видео без потерь, можно использовать следующую команду в FFmpeg:
ffmpeg -sseof -10 -i input.MP4 -map 0:v -map 0:a -map 0:3 -c copy -copy_unknown output.MP4
Однако, как показывает практика, эта команда может изменить порядок потоков, что недопустимо для нашей задачи.
Проблема с порядком потоков
При использовании вышеуказанной команды выходной файл может иметь измененный порядок потоков:
- Видео
- Аудио
- Данные: bin_data
- Данные: нет
Это может привести к утрате важной информации телеметрии.
Изменение порядка потоков
Рекомендуемый подход для поддержания порядка потоков заключается в использовании параметра -map
, однако FFmpeg не всегда правильно обрабатывает неизвестные кодеки. Это может вызвать ошибки, например:
Could not find tag for codec none in stream #2
Возможное решение
В попытках исправить проблему можно попробовать перемещать -copy_unknown
, но это не всегда приводит к желаемому результату. Например, применение следующей команды:
ffmpeg -sseof -10 -i input.MP4 -map 0:v -map 0:a -copy_unknown -map 0:3 -c copy output.MP4
По-прежнему не гарантирует сохранение порядка потоков.
Проверка полученных данных
Важно проверить выходной файл на наличие ошибок. Вы можете использовать команду:
ffmpeg -i output.MP4
Для детального анализа потоков и их метаданных.
Обходные пути и дополнительные советы
Если вы хотите сохранить данные телеметрии, можно попытаться использовать следующее:
ffmpeg -i GoPro_file_example.MP4 -map 0:2 -c copy -f data stream3_map0:2.bin
Это решение позволяет сохранить отдельные данные, однако может не содержать всю необходимую информацию.
Заключение
Работа с видеофайлами GoPro через FFmpeg может быть сложной, особенно когда речь идет об извлечении данных без потерь. Важно следить за порядком потоков и тщательно проверять выходные файлы на наличие ошибок. Надеемся, что эта статья помогла вам разобраться с извлечением последних секунд видео и сохранением важных данных. Если у вас возникли дополнительные вопросы, не стесняйтесь задавать их в комментариях.