- 前期准备
利用pycharm新建一个project(注意网页文档的位置与python文件的相对位置)
案例:视频分镜头播放
1、利用python准备好所需的后端文件
#哈希算法:略
def hashcount():
for i in range(449):
img1 = cv2.imread('static/pic/image{}.jpg'.format(i))
img2 = cv2.imread('static/pic/image{}.jpg'.format(i+1))
hash1= aHash(img1)
hash2= aHash(img2)
n = cmpHash(hash1, hash2)
if (n>20):
print('均值哈希算法相似度:',n)
cv2.imwrite('static/shot/image{}.jpg'.format(i+1),img2)
#计算分镜头的时间
def secondcount():
for i in range(449):
img1 = cv2.imread('static/pic/image{}.jpg'.format(i))
img2 = cv2.imread('static/pic/image{}.jpg'.format(i+1))
hash1= aHash(img1)
hash2= aHash(img2)
n = cmpHash(hash1, hash2)
if (n>20):
print('均值哈希算法相似度:',n)
second_list.append(i)
2、构建flask框架
import os.path
from flask import Flask,render_template
import numpy as np
app=Flask(__name__)
@app.route('/')
def index():
#return "Hi,Flask!"
#return render_template('index.html')
#所需依次展示的文件位置
pic='static/shot/'
path_list = os.listdir(pic)
second = [3.1333333333333333, 4.3, 6.433333333333334, 9.133333333333333, 10.466666666666667, 12.066666666666666,
13.3, 13.366666666666667]
#与emplate文件夹中html文件对应
return render_template('index.html', pic1=pic, path=path_list,second=second)
if "__main__"==__name__:
app.run(port="1101")
3、在html中展示并设定播放的时间段
<div class="container">
<input type="file" id="file" onchange="playMedia(5,15)">
//读取pic文件夹中的已经经过分镜头的图片
<h2>分镜头结果</h2>
{% for i in path %}
<img height="43.9" src="{{pic1}}{{i}}" />
{% endfor %}
//循环second列表中的分镜头时间,将开始时间重新设置
{% for n in second %}
<button onclick="setCurrentTime({{n}})" type="button">播放这一段</button>
{% endfor %}
{% for n in second %}
<p style="font-size:5px">分镜头点时间:{{n}}</p>
{% endfor %}
<video id="video1" width="480" height="320" autoplay="autoplay" controls>
</video>
<br>
<input type="text" id="showTime" value="显示当前播放时间"/>
</div>
<script>
var myVid=document.getElementById("video1");
myVid.addEventListener("timeupdate",timeupdate);
var _endTime;
//视频播放
function playMedia(startTime,endTime){
//设置结束时间
_endTime = endTime;
var file = document.getElementById("file").files[0];
if(!file){
alert("请指定视频路径");
return false;
}
var url = (window.URL) ? window.URL.createObjectURL(file) : window.webkitURL.createObjectURL(file);
myVid.src = url;
myVid.controls = true;
setTimeout("setCurrentTime('"+startTime+"')",200);
}
//设置视频开始播放事件
function setCurrentTime(startTime){
myVid.currentTime=startTime;
myVid.play();
}
function timeupdate(){
//因为当前的格式是带毫秒的float类型的如:12.231233,所以把他转成String了便于后面分割取秒
var time = myVid.currentTime+"";
document.getElementById("showTime").value=time;
var ts = time.substring(0,time.indexOf("."));
if(ts==_endTime){
myVid.pause();
}
}
</script>
</body>
在线读取视频
def genFrame():
image_save = 'D:\image\shot'
if not (os.path.exists(image_save)):
os.mkdir(image_save)
cap = cv2.VideoCapture('ghz.mp4')
_, img1 = cap.read()
fc = cap.get(cv2.CAP_PROP_FRAME_COUNT)
cv2.imwrite('D:\image\shot\image{}.jpg'.format(0), img1)
#while(cap.isOpened()):
for i in range(int(fc)-1):
_, img2 = cap.read()
#cv2.imshow("img",img2)
hash1 = aHash(img1)
hash2 = aHash(img2)
n = cmpHash(hash1, hash2)
print (n)
if n<0.4:
print(n)
cv2.imwrite('D:\image\shot\image{}.jpg'.format(i), img2)
img1=img2
genFrame()