gpt4 book ai didi

python - 如何在numpy数组中转换视频

转载 作者:行者123 更新时间:2023-12-04 15:09:39 24 4
gpt4 key购买 nike

将视频文件转换为 NumPy 数组的程序,反之亦然。我搜索了很多搜索引擎,但都没有找到答案。

最佳答案

人们为此使用了多个图书馆(即 PyAVdecordopencv );我个人为此经常使用 Python OpenCV(主要使用 PyTorch,但它的原理类似),所以我将在那里谈谈我的经验。您可以使用 cv2.VideoCapture将视频文件加载到 numpy大批;理论上,您也可以使用cv2.VideoWriter写回来,但在实践中,我很难让它在我自己的项目中工作。
视频到 Numpy 数组
tl;dr:创建一个 cv2.VideoCapture wrapper ;从视频中迭代加载图像(即帧)。

frames = []

path = "/path/to/my/video/file.mp4"
cap = cv2.VideoCapture(path)
ret = True
while ret:
ret, img = cap.read() # read one frame from the 'capture' object; img is (H, W, C)
if ret:
frames.append(img)
video = np.stack(frames, axis=0) # dimensions (T, H, W, C)
请注意,图像将以 BGR channel 格式返回,而不是更常见的 RGB;如果您需要将其转换为 RGB 色彩空间, img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)就足够了。
Numpy 数组到视频
理论上,我见过的使用 cv2.VideoWriter 的例子去像
# let `video` be an array with dimensionality (T, H, W, C)
num_frames, height, width, _ = video.shape

filename = "/path/where/video/will/be/saved.mp4"
codec_id = "mp4v" # ID for a video codec.
fourcc = cv2.VideoWriter_fourcc(*code)
out = cv2.VideoWriter(filename, fourcc, 20, (width, height))

for frame in np.split(video, num_frames, axis=0):
out.write(frame)
您也可以将帧保存到临时图像(存在许多 np.ndarray -> 图像管道;我个人使用 Pillow),然后使用 ffmpeg (命令行实用程序)将帧编码为视频文件。不过,这会占用更多的空间,当我需要检查视频阵列的各个帧时,我会使用这种方法(在这种情况下,我使用 ffmpeg ,但这是一个不同的对话)。
另外,您可能想要更改 codec_id变量取决于您想如何编码视频(如果这对您来说没有任何意义,请不要担心 - 这对您的应用程序可能无关紧要);这只是一个四字节代码,用于识别用于生成视频的视频编解码器(请参阅 this page ;可用性可能因平台而异(。H.264 是当今最常用的 AFAIK,由代码给出) “H264”或“X264”,但我很难让它与 OpenCV ( more details here ) 一起工作;但是, array -> images -> video file 方法与命令行中的 ffmpeg 无缝协作。

关于python - 如何在numpy数组中转换视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65446464/

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