如何使用TensorFlow从MP4视频中提取符合深度学习模型输入要求的帧序列
方案1:TensorFlow 内置预定义函数
TensorFlow 2.6及以上版本自带tf.keras.utils.video_to_array函数,完全匹配你的需求,输入视频路径即可直接返回形状为(帧数, 高度, 宽度, 通道数)的张量,用法和你之前提取GIF帧的逻辑高度一致:
import tensorflow as tf from tensorflow.keras.utils import video_to_array video_path = "input.mp4" video_tensor = video_to_array(video_path) print(video_tensor.shape) # 输出示例:TensorShape([150, 720, 1280, 3])
如果需要调整抽帧逻辑,可以传入frame_step(抽帧步长,比如设为2就是每2帧取1帧)、max_frames(最多提取的帧数)等参数控制输出。
方案2:兼容全格式的自定义封装
如果遇到不支持的视频编码格式,也可以用OpenCV自己封装一个轻量工具函数,兼容性更强,支持几乎所有常见视频格式:
import cv2 import numpy as np import tensorflow as tf def decode_video(video_path): cap = cv2.VideoCapture(video_path) frame_list = [] while True: ret, frame = cap.read() if not ret: break # OpenCV默认返回BGR通道,转换为模型常用的RGB通道 frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) frame_list.append(frame_rgb) cap.release() # 可以按需转换为TensorFlow张量 return tf.convert_to_tensor(np.array(frame_list)) # 调用示例 video_tensor = decode_video("input.mp4") print(video_tensor.shape)
你可以根据自己的需求在函数内添加帧缩放、归一化等预处理逻辑,直接适配模型输入要求。
内容的提问来源于stack exchange,提问作者Hamza
相关产品推荐
相关产品推荐

