Terkadang, memilah-milah puing-puing file video besar dan kecil dalam sebuah folder (folder), tidak ada waktu untuk melihat isi dari setiap file. Di sinilah muncul apa yang disebut thumbnail, yang memungkinkan Anda membuat ide tentang konten dalam bentuk pemotongan fragmen dari video.
Mari buat program kecil yang akan membuat thumbnail untuk setiap file di folder windows saat ini, dan tambahkan garis waktu ke file yang dipotong.
Impor standar modul di awal program python:
import numpy as np
import cv2
import os
Kami menunjukkan di folder mana untuk mencari file dan menambahkan pesan untuk pengguna:
file=file
print('...')
path=r'E:\1'
os.chdir(path)
Di sini program memproses semua file pada drive E di folder 1.
Selanjutnya, buka pertempuran, potong bingkai dan garis waktu ke mereka:
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 - jumlah file dalam pemotongan, 12 buah.
Karena pemotongan garis waktu dalam hitungan detik, sehingga ditampilkan dengan benar pada bingkai, mari
tambahkan fungsi yang mengarah ke format waktu 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
Sekarang kita mendapatkan gambarnya, kurangi ukurannya hingga 50% dan simpan ke disk sebagai file perantara:
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()
Kami merekatkan file yang dihasilkan, menggunakan opencv, secara horizontal satu sama lain, mengamati urutan:
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
Rekatkan "kembar tiga" yang dihasilkan secara vertikal:
#
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])
Kami membersihkan folder dengan menghapus file sementara:
#
c=['jpg', 'png']
for root, dirs, files in os.walk(path):
for file in files:
if file[-3:] in c:
os.remove(file)
Kami melakukan prosedur di atas untuk semua file video di folder:
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)
Kode program untuk mereka yang menjadi milik saya, pertama-tama mengunduh kode, dan kemudian membaca artikel - unduh .
Garis waktu PS bukan tanpa dosa dan sedikit tidak berhubungan dengan video garis waktu yang sebenarnya.
Ini terutama terlihat pada file video besar.