gpt4 book ai didi

python - 是否可以将 POST 请求中的视频读入 python-ffmpeg 或 OpenCV?

转载 作者:行者123 更新时间:2023-12-04 23:21:17 29 4
gpt4 key购买 nike

我一直在想一种方法来使用 ffmpeg-python 或 OpenCV 从 POST 请求中读取上传的视频,这样我就可以在保存之前对其进行处理,这可能吗?
如果不是,那么将视频保存到磁盘然后进行所有需要的处理是否安全?困扰我的主要一点是我想读取视频长度,以便我可以验证它是否有效,所以将它保存到磁盘中,检查长度,然后如果它的长度在允许的范围内则保留它也是一个好主意范围,否则我删除它。
提前致谢。
注意:我注意到标签不包含 ffmpeg-python,因此也接受有关 pyffmpeg 的答案。

最佳答案

收到视频后,您可以像处理硬盘中的任何其他视频一样对其进行处理。注意视频的格式。我在这个例子中使用 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 application framework:
https://flask.palletsprojects.com/en/1.1.x/
在这里用于文件上传配置和安全问题:
https://flask.palletsprojects.com/en/1.1.x/patterns/fileuploads/
限制视频文件的文件大小
服务器 (或您的充当服务器的脚本)不知道在 期间正在接收的视频文件的长度(小时:分钟:秒)。发布请求 来自 客户 HTML 表单 .但是 SERVER 可以
知道文件大小的三件事 的字节数视频文件 .
第一个和第二个是 易于破解 因为可以伪造。第三个是 不可破解 .
第一件事是:通过要求输入视频文件的大小( BAD IDEA )来给予用户充分的信心。
第二个是:阅读 标题 HTTP POST 请求 content-length: value ”(这个值也可以被用户伪造)。
第三个是:读取并计算服务器正在接收的字节数。
如果您的 BYTE COUNT 开始变得太高,最好选择关闭连接。
脚本也是如此 你的自我 (套接字编程)或配置现有的 HTTP 服务器 网络框架 为你做这件事(我把链接放到了 Flask)。
http post 请求是如何发生的
HTML FORM 发送数据 , 浏览器发出 POST 请求 像这样向服务器发送一些信息:
这是 的示例POST 请求的 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 的值太高,你可以 中止连接从服务器端。 否则继续读取和保存数据到服务器的硬盘。
所有这些东西都是 套接字编程 .
您可以 尝尝这里: https://realpython.com/python-sockets/
确保上传文件无法执行
上传时重命名文件
验证 Content-Type header
使用病毒扫描程序
更好的安全性 读取文件头的内容正在上传,因为 HTTP POST HEADER 可能完全是 FALSIFIED 。
这里是 mp4 文件格式的示例:
https://www.file-recovery.com/mp4-signature-format.htm

关于python - 是否可以将 POST 请求中的视频读入 python-ffmpeg 或 OpenCV?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65734627/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com