收到视频后,您可以像处理硬盘中的任何其他视频一样对其进行处理。注意视频的格式。我在这个例子中使用 video.mp4。
import cv2
video_path="videos/drone-001.mp4"
cap = cv2.VideoCapture(video_path)
# Some characteristics from the original video
w_frame, h_frame = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps, num_frames = cap.get(cv2.CAP_PROP_FPS), cap.get(cv2.CAP_PROP_FRAME_COUNT)
print(fps,num_frames,w_frame,h_frame)
while(True):
success, frame = cap.read()
if success:
cv2.imshow('video',frame)
if cv2.waitKey(10) & 0xFF == ord('q'):
break
# When everything done, release the capture and destroy windows
cap.release()
cv2.destroyAllWindows()
或者用ffmpeg处理视频...
获取有关视频的信息:
ffmpeg -i videos/drone-001.mp4
输出:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'videos/drone-001.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
creation_time : 2019-12-28T10:01:05.000000Z
Duration: 00:05:41.38, start: 0.000000, bitrate: 2324 kb/s
Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720 [SAR 1:1 DAR 16:9], 2192 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
Metadata:
creation_time : 2019-12-28T10:01:05.000000Z
handler_name : ISO Media file produced by Google Inc. Created on: 12/28/2019.
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
Metadata:
creation_time : 2019-12-28T10:01:05.000000Z
handler_name : ISO Media file produced by Google Inc. Created on: 12/28/2019.
你可以看看 Flask ,WSGI web 应用框架:
https ://flask.palletsprojects.com/en/1.1.x/
这里是文件上传配置和安全问题:
https ://flask.palletsprojects.com/en/1.1.x/patterns/fileuploads/
限制视频文件的文件大小
SERVER(或充当服务器的脚本)不知道在HTML FORM的CLIENT的 POST REQUEST期间接收的视频文件的长度(小时:分钟:秒) 。但是服务器可以做
三件事来了解视频文件的文件大小(以字节为单位)。
第一个和第二个很容易破解,因为可以伪造。第三个是NOT HACKABLE。
第一件事是:通过要求输入视频文件的大小( BAD IDEA)来给予用户充分的信心。
第二种是:读取HTTP POST REQUEST的HEADER “ content-length:value ”(这个值也可以被用户伪造)。
第三个是:读取并计算服务器正在接收的字节数。
如果您的 BYTE COUNT 开始变得太高,最好选择关闭连接。
所以自己编写脚本(SOCKET PROGRAMMING)或配置一个现有的HTTP 服务器或WEB 框架来为你做这件事(我把链接放到 Flask)。
http post 请求是如何发生的
当HTML FORM 发送数据时,浏览器发出一个 POST 请求,向服务器发送一些信息,如下所示:
这是POST REQUEST的 HTTP HEADER 示例
POST /video-upload/ HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: it-IT,it;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: multipart/form-data; boundary=---------------------------219493771727403213993181042749
Content-Length: 99211703
Connection: keep-alive
Upgrade-Insecure-Requests: 1
看内容长度:99211703
... 99MB 之类的...
如果 content-length 的值太高,您可以从服务器端 中止连接。否则继续读取数据并将其保存到服务器的硬盘。
所有这些东西都是SOCKET PROGRAMMING。
你可以在这里品尝它 : https ://realpython.com/python-sockets/
确保无法执行
上传文件 在上传时重命名文件
验证 Content-Type 标头
使用病毒扫描程序
更好的安全性读取正在上传的文件头的内容,因为 HTTP POST HEADER 可能完全是 FALSIFIED 。
这里是 mp4 文件格式的示例:
https ://www.file-recovery.com/mp4-signature-format.htm