Итак, я следовал этому руководству, но, похоже, он ничего не делает. Просто ничего. Он ждет несколько секунд и закрывает программу. Что не так с этим кодом?
import cv2
vidcap = cv2.VideoCapture('Compton.mp4')
success,image = vidcap.read()
count = 0
success = True
while success:
success,image = vidcap.read()
cv2.imwrite("frame%d.jpg" % count, image) # save frame as JPEG file
if cv2.waitKey(10) == 27: # exit if Escape is hit
break
count += 1
Также в комментариях написано, что это ограничивает количество кадров до 1000? Зачем?
РЕДАКТИРОВАТЬ: success = True
Сначала я попытался сделать, но это не помогло. Он создал только одно изображение размером 0 байт.
python
python-2.7
opencv
GShocked
источник
источник
success
?True
илиFalse
?print success
где-нибудь.success
; если это false, значит, по какой-то причине чтение видео не удалось. Сначала вам нужно заставить этот бит работать.brew install opencv --python27 --ffmpeg
если вы используете другую версию Python, вам нужно будет изменить ее на свою версию.Ответы:
От сюда скачать это видео таким образом , мы имеем тот же видеофайл для тестирования. Убедитесь, что файл mp4 находится в том же каталоге, что и ваш код Python. Затем также убедитесь, что интерпретатор python запущен из того же каталога.
Затем измените код, к черту,
waitKey
что зря тратит время, также без окна он не может захватывать события клавиатуры. Также мы печатаемsuccess
значение, чтобы убедиться, что оно успешно считывает кадры.Как это происходит?
источник
Read a new frame: False
Чтобы расширить этот вопрос (и ответ @ user2700065) для немного разных случаев, если кто-то не хочет извлекать каждый кадр, но хочет извлекать кадр каждую секунду. Таким образом, 1-минутное видео даст 60 кадров (изображений).
источник
opencv-2.4.9
, поэтому вместо того,cv2.CAP_PROP_POS_MSEC
чтобы использоватьcv2.cv.CAP_PROP_POS_MSEC
count = count + 5
cv2.imwrite()
в начале цикла, так как вы вызывали егоcv2.imread()
перед циклом?Это настройка из предыдущего ответа для python 3.x от @GShocked, я бы опубликовал его в комментарии, но у меня недостаточно репутации
источник
Это функция, которая преобразует большинство видеоформатов в количество кадров видео. Он работает
Python3
сOpenCV 3+
Он поддерживает
.mts
и обычные файлы вроде.mp4
и.avi
. Проверено и проверено на.mts
файлах. Работает как шарм.источник
После долгих исследований того, как конвертировать кадры в видео, я создал эту функцию, надеюсь, это поможет. Для этого нам потребуется opencv:
изменить значение fps (кадров в секунду), путь к папке ввода и путь к папке вывода в соответствии с вашими локальными местоположениями
источник
Предыдущие ответы потеряли первый кадр. А картинки неплохо будет хранить в папке.
Кстати, вы можете проверить количество кадров по VLC. Перейдите в окна -> информация о мультимедиа -> сведения о кодеке
источник
cv.CAP_PROP_POS_AVI_RATIO
, но не знаю как. tnxЭтот код извлекает кадры из видео и сохраняет кадры в формате .jpg.
источник
Я использую Python через программу Anaconda Spyder. Используя исходный код, указанный в вопросе этой ветки @Gshocked, код не работает (python не читает файл mp4). Поэтому я загрузил OpenCV 3.2 и скопировал «opencv_ffmpeg320.dll» и «opencv_ffmpeg320_64.dll» из папки «bin». Я вставил оба этих файла dll в папку «Dlls» Anaconda.
У Anaconda также есть папка «pckgs» ... Я скопировал и вставил всю папку «OpenCV 3.2», которую я загрузил, в папку «pckgs» Anaconda.
Наконец, в Anaconda есть папка «Библиотека», в которой есть подпапка «bin». Я вставил в эту папку файлы «opencv_ffmpeg320.dll» и «opencv_ffmpeg320_64.dll».
После закрытия и перезапуска Spyder код заработал. Я не уверен, какой из трех методов сработал, и мне лень возвращаться и разбираться в этом. Но работает так, ура!
источник
Эта функция извлекает изображения из видео с частотой 1 кадр / с, ДОПОЛНИТЕЛЬНО она определяет последний кадр и также прекращает чтение:
источник
Следующий скрипт будет извлекать кадры каждые полсекунды из всех видео в папке. (Работает на python 3.7)
источник