Извлечение кадров из видео и установка метки времени на изображения

1550
Peter

Я хочу извлекать кадры каждые 10 секунд из видео и геотегировать эти кадры, используя дорожку GPX.

На моем компьютере с Windows 8 у меня есть инструменты для извлечения кадров (FFMPEG), установки временных меток изображений (ExifTool) и геотегирования изображений (GeoSetter).

Однако я не знаю, как скопировать метку времени из видео в метку времени захваченного кадра.

0
См. [Этот ответ] (http://superuser.com/questions/841872/how-do-i-extract-the-timestamps-associated-with-frames-ffmpeg-extracts-from-a-vi/842397#842397) , Но это для Linux. slhck 9 лет назад 0
@slhck: также в этом примере создается текстовый файл с именами файлов и временными метками. Он не присваивает временные метки файлам. Peter 9 лет назад 0
Это было бы простым делом итерации по линиям и переименования файлов на основе этого шаблона. Но я даже не знаю, работает ли это для вас, так как вы упомянули Windows 8. Вы уже что-то пробовали? slhck 9 лет назад 0

1 ответ на вопрос

1
Krzysiu

Этот пакетный файл извлекает кадры каждые X секунд, а затем геотегирует его: https://gist.github.com/Krzysiu/345c37b08d79d5f47971167e33bb2bd3

Это требует ffmpegи exiftool. Все настройки должны быть заполнены вручную (строки 28-68).

Как это работает внутри?

  1. Сначала он извлекает кадры, используя фильтр ffmpeg с правильными параметрами (стандартные по умолчанию не сработают)
  2. Он устанавливает одинаковую метку времени для всех извлеченных кадров *. Временная метка может быть указана вручную или любая метка / файл изменяет и создает время из видеофайла.
  3. Сдвиг по времени для каждого изображения применяется. Я использовал этот метод, так как, кажется, нет простого способа сдвинуть время в случае ручной отметки времени.
  4. Фреймы геотегируются с использованием файла gpx.

* фактически для всех файлов, совпадающих %output_directory%\%frame_prefix%*.jpg, поэтому, если вы извлекли сначала 150 кадров, а затем 100 в один и тот же каталог и с тем же префиксом, он обработает все 150 кадров, включая 101-150 от предыдущего прохода.

Возможно, это можно сделать гораздо быстрее - выражение в Exiftool, которое будет умножать индекс файла на X от «кадра каждые X секунд». Я не очень хорош с выражениями Perl и Exiftool, поэтому я сделал это так.

Похожие вопросы