في بعض الأحيان ، عند الفرز بين ركام ملفات الفيديو الكبيرة والصغيرة في مجلد (مجلدات) ، لا يوجد وقت للنظر في محتويات كل ملف. هذا هو المكان الذي يتبادر إلى الذهن ما يسمى بالصور المصغرة ، والتي تسمح لك بإنشاء فكرة عن المحتوى في شكل قطع أجزاء من مقطع فيديو.
لنقم بإنشاء برنامج صغير يقوم بإنشاء صور مصغرة لكل ملف من الملفات الموجودة في مجلد windows الحالي وإضافة جدول زمني إلى الملفات المقطوعة.
الاستيراد القياسي للوحدات في بداية برنامج بيثون:
import numpy as np
import cv2
import os
نشير إلى المجلد الذي يجب البحث فيه عن الملفات وإضافة رسالة للمستخدم:
file=file
print('...')
path=r'E:\1'
os.chdir(path)
هنا يعالج البرنامج جميع الملفات الموجودة على محرك الأقراص E في المجلد 1.
بعد ذلك ، يدخل opencv المعركة ويقطع الإطارات والجدول الزمني لها:
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=[]
ن - عدد الملفات في التقطيع 12 قطعة.
نظرًا لأن تقسيم المخطط الزمني يتم في ثوانٍ ، بحيث يتم عرضه بشكل صحيح على الإطارات ، فلنقم
بإضافة وظيفة تؤدي إلى تنسيق الوقت 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 من الخطيئة وهو بعيد قليلاً عن فيديو المخطط الزمني الحقيقي.
هذا ملحوظ بشكل خاص في ملفات الفيديو الكبيرة.