[Python, Обработка изображений] Создаем tumbnails для видео с python и opencv
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Порой, разбирая завалы больших и малых видеофайлов в папке(папках) нет времени заглядывать в содержимое каждого файла. Тут на ум приходят так называемые tumbnails, которые позволяют в виде нарезки фрагментов из видео, создать представление о содержимом.
Создадим небольшую программу, которая создаст tumbnails для каждого из файлов в текущей папке windows, и добавит timeline к вырезанным файлам.
Стандартный импорт модулей в начале программы на python:
import numpy as np
import cv2
import os
Укажем, в какай папке искать файлы и добавим сообщение для пользователя:
file=file
print('Подождите...')
path=r'E:\1'
os.chdir(path)
Здесь программа обрабатывает все файлы на диске E в папке 1.
Далее вступает в бой opencv, нарезает кадры и timeline к ним:
vidcap = cv2.VideoCapture(path+'\\'+file)
fps = vidcap.get(cv2.CAP_PROP_FPS)
#print(fps)
n=12
total_frames = vidcap.get(cv2.CAP_PROP_FRAME_COUNT)
time_line = total_frames / fps
frames_step = total_frames//n
time_line_step=time_line//n
#print(int(time_line_step))
a=[]
b=[]
n — количество файлов в нарезке, 12 штук.
Так как нарезка timeline в секундах, чтобы она корректно отображалась на кадрах,
добавим функцию, приводящую к формату времени 00:00:00:
def sec_to_time(t):
h=str(t//3600)
m=(t//60)%60
s=t%60
if m<10:
m='0'+str(m)
else:
m=str(m)
if s<10:
s='0'+str(s)
else:
s=str(s)
#print(h+':'+m+':'+s)
t=h+':'+m+':'+s
return t
Теперь получаем картинки, уменьшаем их размер на 50% и сохраняем их на диск, как промежуточные файлы:
for i in range(n):
vidcap.set(1,i*frames_step)
success,image = vidcap.read()
#уменьшаем картинку
scale_percent = 50
width = int(image.shape[1] * scale_percent / 100)
height = int(image.shape[0] * scale_percent / 100)
image=cv2.resize(image, (width, height))
# вставка текста красного цвета c time_line
font = cv2.FONT_HERSHEY_COMPLEX
t=int(time_line_step)*i
image=cv2.putText(image, sec_to_time(t), (100, 30), font, 0.5, color=(0, 0, 255), thickness=0)
cv2.imwrite('image'+str(i)+'.jpg',image)
a.append('image'+str(i)+'.jpg')
vidcap.release()
Склеиваем полученные файлы, используя opencv, между собой по горизонтали, соблюдая очередность:
def glue (img1,img2,img3,x):
i1 = cv2.imread(img1)
i2 = cv2.imread(img2)
i3 = cv2.imread(img3)
vis = np.concatenate((i1, i2, i3), axis=1)
cv2.imwrite('out'+str(x)+'.png', vis)
b.append('out'+str(x)+'.png')
x=0
while x<len(a):
glue(a[x],a[x+1],a[x+2],x)
x+=3
Получившиеся «тройки» склеиваем по вертикали:
#склеиваем видео по вертикали
def glue2 (img1,img2,img3,img4):
i1 = cv2.imread(img1)
i2 = cv2.imread(img2)
i3 = cv2.imread(img3)
i4 = cv2.imread(img4)
vis = np.concatenate((i1, i2, i3,i4), axis=0)
cv2.imwrite(file[:-4]+'.jpeg', vis)
glue2(b[0],b[1],b[2],b[3])
Прибираемся в папке, удаляя временные файлы:
#уборка
c=['jpg', 'png']
for root, dirs, files in os.walk(path):
for file in files:
if file[-3:] in c:
os.remove(file)
Проводим вышеуказанные процедуры для всех видеофайлов в папке:
video=['wmv', 'mp4', 'avi', 'mov', 'MP4', '.rm', 'mkv']
for root, dirs, files in os.walk(r'E:/1'):
for file in files:
if file[-3:] in video:
print('В обработке-'+file)
tumbnail(file)
Код программы для тех, к коим отношусь и я,
сначала скачивает код, а потом читает статью — скачать.
ps. timeline не без греха и немного отрывается от реальной timeline видео.
Особенно это заметно на больших видеофайлах.
===========
Источник:
habr.com
===========
Похожие новости:
- [Python, Обработка изображений, Разработка на Raspberry Pi, Фототехника] Обработка файлов RAW, полученных с камеры Raspberry Pi HQ (перевод)
- [Python, Data Mining] Как я дешево покупаю Apple, используя анализ данных
- [Python, *nix, Разработка на Raspberry Pi] Киоск Raspberry Pi для графического интерфейса на Kivy
- [Python, Работа с 3D-графикой, Искусственный интеллект] 3D ML. Часть 3: датасеты и фреймворки в 3D ML
- [Python, Анализ и проектирование систем] Анализ сетей с использованием графов
- [Python, JavaScript, Java, Swift, Изучение языков] 7 Ultimate Programming languages For Mobile App Development
- [Python, Data Mining, Машинное обучение, Искусственный интеллект, Natural Language Processing] Проект Natasha. Набор качественных открытых инструментов для обработки естественного русского языка (NLP)
- [Python, Data Mining, OpenStreetMap, Открытые данные] Как найти количество всех букв на всех знаках вида «въезд в город Х» в стране? Точный способ ответить на такие вопросы
- [Управление персоналом, Карьера в IT-индустрии] Бесплатные образовательные курсы: бэкенд-разработка
- [Обработка изображений, Фототехника] Как создаётся изображение формата RAW? (перевод)
Теги для поиска: #_python, #_obrabotka_izobrazhenij (Обработка изображений), #_tumbnails, #_narezka_video (нарезка видео), #_timeline, #_python, #_obrabotka_izobrazhenij (
Обработка изображений
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 12:06
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Порой, разбирая завалы больших и малых видеофайлов в папке(папках) нет времени заглядывать в содержимое каждого файла. Тут на ум приходят так называемые tumbnails, которые позволяют в виде нарезки фрагментов из видео, создать представление о содержимом. Создадим небольшую программу, которая создаст tumbnails для каждого из файлов в текущей папке windows, и добавит timeline к вырезанным файлам. Стандартный импорт модулей в начале программы на python: import numpy as np
import cv2 import os Укажем, в какай папке искать файлы и добавим сообщение для пользователя: file=file
print('Подождите...') path=r'E:\1' os.chdir(path) Здесь программа обрабатывает все файлы на диске E в папке 1. Далее вступает в бой opencv, нарезает кадры и timeline к ним: vidcap = cv2.VideoCapture(path+'\\'+file)
fps = vidcap.get(cv2.CAP_PROP_FPS) #print(fps) n=12 total_frames = vidcap.get(cv2.CAP_PROP_FRAME_COUNT) time_line = total_frames / fps frames_step = total_frames//n time_line_step=time_line//n #print(int(time_line_step)) a=[] b=[] n — количество файлов в нарезке, 12 штук. Так как нарезка timeline в секундах, чтобы она корректно отображалась на кадрах, добавим функцию, приводящую к формату времени 00:00:00: def sec_to_time(t):
h=str(t//3600) m=(t//60)%60 s=t%60 if m<10: m='0'+str(m) else: m=str(m) if s<10: s='0'+str(s) else: s=str(s) #print(h+':'+m+':'+s) t=h+':'+m+':'+s return t Теперь получаем картинки, уменьшаем их размер на 50% и сохраняем их на диск, как промежуточные файлы: for i in range(n):
vidcap.set(1,i*frames_step) success,image = vidcap.read() #уменьшаем картинку scale_percent = 50 width = int(image.shape[1] * scale_percent / 100) height = int(image.shape[0] * scale_percent / 100) image=cv2.resize(image, (width, height)) # вставка текста красного цвета c time_line font = cv2.FONT_HERSHEY_COMPLEX t=int(time_line_step)*i image=cv2.putText(image, sec_to_time(t), (100, 30), font, 0.5, color=(0, 0, 255), thickness=0) cv2.imwrite('image'+str(i)+'.jpg',image) a.append('image'+str(i)+'.jpg') vidcap.release() Склеиваем полученные файлы, используя opencv, между собой по горизонтали, соблюдая очередность: def glue (img1,img2,img3,x):
i1 = cv2.imread(img1) i2 = cv2.imread(img2) i3 = cv2.imread(img3) vis = np.concatenate((i1, i2, i3), axis=1) cv2.imwrite('out'+str(x)+'.png', vis) b.append('out'+str(x)+'.png') x=0 while x<len(a): glue(a[x],a[x+1],a[x+2],x) x+=3 Получившиеся «тройки» склеиваем по вертикали: #склеиваем видео по вертикали
def glue2 (img1,img2,img3,img4): i1 = cv2.imread(img1) i2 = cv2.imread(img2) i3 = cv2.imread(img3) i4 = cv2.imread(img4) vis = np.concatenate((i1, i2, i3,i4), axis=0) cv2.imwrite(file[:-4]+'.jpeg', vis) glue2(b[0],b[1],b[2],b[3]) Прибираемся в папке, удаляя временные файлы: #уборка
c=['jpg', 'png'] for root, dirs, files in os.walk(path): for file in files: if file[-3:] in c: os.remove(file) Проводим вышеуказанные процедуры для всех видеофайлов в папке: video=['wmv', 'mp4', 'avi', 'mov', 'MP4', '.rm', 'mkv']
for root, dirs, files in os.walk(r'E:/1'): for file in files: if file[-3:] in video: print('В обработке-'+file) tumbnail(file) Код программы для тех, к коим отношусь и я, сначала скачивает код, а потом читает статью — скачать. ps. timeline не без греха и немного отрывается от реальной timeline видео. Особенно это заметно на больших видеофайлах. =========== Источник: habr.com =========== Похожие новости:
Обработка изображений ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 12:06
Часовой пояс: UTC + 5