FFmpeg - Как получить временную метку кадра, из которого был создан эскиз? - PullRequest
0 голосов
/ 10 апреля 2020

Я использую FFmpeg для извлечения скриншота через временную метку, но я получаю эту временную метку вручную, просматривая видео в VL C и ища точный момент создания эскиза, этот процесс очень трудоемкий, и я нужно сделать это с 220 видео .

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

Может ли FFmpeg дать мне точную метку времени, где был сделан эскиз?

ОБНОВЛЕНО

После нескольких часов тестирования с помощью команд FFmpeg я нашел решение, оно не полностью автоматическое c, но оно работает, затем команда:

ffmpeg -ss 00:02:30 -i video.mp4 -t 00:00:40 -loop 1 -i thumbnail.jpg \
   -filter_complex "scale=480:270,hue=s=0,blend=difference:shortest=1, \
    blackframe=95:30,fps=fps=23" -f null -

Опции для изменения:

  1. «video.mp4» заменяет видеофайл (очевидно).
  2. «thumbnail.jpg» заменяет файл миниатюр.
  3. «- ss» и «-t» - это диапазон времени, где т он, скорее всего, будет.
    • "- ss" время начала 00:02:30 (2 минуты с 30 с c)
    • "- t" время с начала 00:00:40 (2 минуты с 30se c + 40se c)
    • Если вы не знаете, где, вероятно, находится миниатюра, вы можете удалить эту часть, только для ее поиска потребуется больше времени.
  4. "480: 270" замените размер миниатюры.
  5. "fps = 23" измените 23 для точности fps файла "video.mp4".

И у нас есть ответ:

[Parsed_blackframe_1] frame:3849 pblack:100 pts:160535 t:160.535000

В этом примере мы можем видеть, что команда дала нам точную временную метку, где было сгенерировано миниатюру "160.535000", которая выражается в секундах с микросекундами.

Теперь для извлечения миниатюры в высоком разрешении мы могли бы использовать найденную временную метку, но учтите, что было бы более точно и точно использовать номер кадра, который в этом случае был бы «frame: 3849».

Использование Эта команда, мы получаем точное изображение:

ffmpeg -i video.mp4 -vf "select=gte(n\, 3849)" -vframes 1 high_resolution.png

Ну, я надеюсь, что это полезно для тех, кто ищет оригинал Изображение миниатюры или вообще, кому нужно точно знать, в какую минуту это было сделано.

Если кто-то в будущем захочет написать сценарий, который может полностью автоматизировать этот процесс, я был бы признателен:)

...