收到视频后,您可以像处理硬盘中的任何其他视频一样对其进行处理。注意视频的格式。我在这个例子中使用了 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(或您的充当服务器的脚本)不知道在 POST REQUEST 期间从HTML FORM 的 CLIENT。但是 SERVER 可以
了解文件大小的三件事视频文件的字节数。
第一个和第二个是易于破解,因为可以伪造。第三个是NOT HACKABLE。
第一件事是:要求输入视频文件的大小(BAD IDEA),让用户充满信心。
第二种是:读取HTTP POST REQUEST的HEADER“content-length:value” (这个值也可以被用户伪造)。
第三个是:读取并计算服务器正在接收的字节数。
如果您的 BYTE COUNT 开始变得过高,最好选择关闭连接。
编写脚本你自己(SOCKET PROGRAMMING)或配置现有的HTTP服务器或WEB框架为你做这件事(我把链接放到 Flask)。
http post 请求是如何发生的
当 HTML FORM 发送数据 时,BROWSER 发出 POST REQUEST 向服务器发送一些信息,如下所示:
这是 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 可以完全伪造。
这里是 mp4 文件格式的示例:
https://www.file-recovery.com/mp4-signature-format.htm