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

Предпосылки

Вам необходимо установить Python и FFMPEG. Я рассказываю, как это сделать, в своей статье Прямая трансляция в браузер с помощью FFMPEG CLI и Python.

Извлеките изображения из вашего видео

В примере кода для извлечения изображений для вашего видео используется модуль ffmpeg-python.

import ffmpeg

YOUR_FILE = 'sample-mov-file.mov'
probe = ffmpeg.probe(YOUR_FILE)
time = float(probe['streams'][0]['duration']) // 2
width = probe['streams'][0]['width']

# Set how many spots you want to extract a video from. 
parts = 7

intervals = time // parts
intervals = int(intervals)
interval_list = [(i * intervals, (i + 1) * intervals) for i in range(parts)]
i = 0

for item in interval_list:
    (
        ffmpeg
        .input(YOUR_FILE, ss=item[1])
        .filter('scale', width, -1)
        .output('Image' + str(i) + '.jpg', vframes=1)
        .run()
    )
    i += 1
  1. У вас должно быть видео, из которого вы хотите извлечь изображения, в той же папке, что и пример кода, если вы хотите использовать образец как есть. Добавьте полное имя вашего видеофайла в место с надписью "sample-mov-file.mov".
  2. Теперь мы используем ffmpeg.probe для получения информации о вашем видео. Вам понадобится длина видео, чтобы мы могли выяснить, насколько далеко друг от друга должны быть изображения, которые мы извлекаем.
  3. Установите parts равным количеству мест, из которых вы хотите извлечь видео.
  4. Теперь я использую понимание списка, чтобы получить список интервалов в секундах в вашем видео.
  5. Я хочу начать получать изображения с конца каждого интервала, поэтому я использую цикл for, чтобы получить конец каждого интервала для моих изображений. Цикл будет выполняться и извлекать один кадр каждый раз, помечая его как ImageZ, где Z начинается с 0 и достигает общего количества запрошенных вами изображений.
  6. Вы можете объединить эти изображения в видео, используя этот пример кода: Собрать видео из последовательности кадров

Это все! Вы можете попробовать это с различными типами списков для интервалов, если хотите. Развлекайся. :)

Первоначально опубликовано на https://api.video.