кадры изображения Python для видео - PullRequest
5 голосов
/ 07 апреля 2011

Я пишу приложение на python / django, и оно должно выполнять манипуляции с изображениями, а затем объединять изображения в видео (каждое изображение представляет собой кадр).Манипулирование изображениями легко.Я использую PIL, но для преобразования в видео я застрял.Я нашел pyffmpeg, но, похоже, он выполняет декодирование видео в кадры, а не наоборот.Хотя, возможно, я что-то пропустил.Я также слышал, что pythonMagick (обертка imagemagick) может сделать это, но я не могу найти ничего о кодировании в документации.

Это работает на сервере Linux и должно быть Python (поскольку это то, что приложение находится в).

Что мне использовать?

Ответы [ 4 ]

7 голосов
/ 07 апреля 2011

Использование OpenCV и Python-связывания. Есть функция cv.WriteFrame. Аналогичный вопрос и ответ

3 голосов
/ 29 ноября 2016

Сначала установите ffmpeg с помощью следующей команды: sudo apt install ffmpeg

import os
os.system("ffmpeg -f image2 -r 1/5 -i ./images/swissGenevaLake%01d.jpg -vcodec mpeg4 -y ./videos/swissGenevaLake.mp4")

подробности:

Вышеупомянутый код создает видео из файла трех изображений, хранящегося в папке изображений. Каждое изображение воспроизводится в течение 5 секунд в видео (из-за аргумента: -r 1/5). Три имени файла: «swissGenevaLake1.jpg», «swissGenevaLake2.jpg» и «swissGenevaLake3.jpg» в папке изображений.

Надеюсь, это поможет.

1 голос
/ 07 апреля 2011

Вы можете использовать Popen только для запуска ffmpeg в подпроцессе.

0 голосов
/ 06 октября 2018

Если у вас есть папка с изображениями, которая будет отображаться как видео. Вы можете настроить параметры и упорядочить кадры отсортированным образом.

import cv2
import os
from tqdm import tqdm
import glob
#TODO
image_folder = '<Enter your target frames folder here>/*'
video_name = 'Dir to store the video'#save as .avi
#is changeable but maintain same h&w over all  frames
width=640 
height=400 
#this fourcc best compatible for avi
fourcc = cv2.VideoWriter_fourcc('M','J','P','G')
video=cv2.VideoWriter(video_name,fourcc, 2.0, (width,height))



for i in tqdm((sorted(glob.glob(image_folder),key=os.path.getmtime))):
     x=cv2.imread(i)
     video.write(x)

cv2.destroyAllWindows()
video.release()
...