OpenCV下的视频和帧图片转换(Video2Frame&Frame2Video, VideoCaptur e&VideoWriter)
文章目录
- [1. 杂话](#1. 杂话)
- [2. 视频转图片(Video2Frame, VideoCapture)](#2. 视频转图片(Video2Frame, VideoCapture))
-
- [2.1 先看代码](#2.1 先看代码)
- [3. 图片转视频(Frame2Video, VideoWriter)](#3. 图片转视频(Frame2Video, VideoWriter))
-
- [3.1 先看代码](#3.1 先看代码)
- [3.2 看看参数解释](#3.2 看看参数解释)
1. 杂话
这就很直观了嘛,就是如何通过opencv来进行视频和帧图片的转换,就。。。没啥好说的吧。直接看代码:
2. 视频转图片(Video2Frame, VideoCapture)
2.1 先看代码
python
import os
import cv2
def video_to_frames(video_path, frames_dir):
cap = cv2.VideoCapture(video_path)
frame_count = 0
while True:
ret, frame = cap.read()
if not ret:
break
frame_filename = os.path.join(frames_dir, \
f"{frame_count:04d}.jpg")
cv2.imwrite(frame_filename, frame)
frame_count += 1
cap.release()
3. 图片转视频(Frame2Video, VideoWriter)
3.1 先看代码
python
import os
import cv2
def frame_to_video(frame_folder, video_name, fps):
frames = [frame for frame in os.listdir(frame_folder) \
if frame.endswith(".jpg")]
frames.sort(key = lambda x : int(os.path.splitext(x)[0]))
frame_0 = cv2.imread(os.path.join(frame_folder, frames[0]))
height, width, layers = frame_0.shape
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
video = cv2.VideoWriter(video_name, fourcc, fps, \
(width, height))
for frame in frames:
video.write(cv2.imread(os.path.\
join(frame_folder, frame)))
video.release()
3.2 看看参数解释
FOURCC 是 "Four-Character Code" 的缩写,用于指定视频流的编码格式。在 OpenCV 中使用 cv2.VideoWriter_fourcc 来创建 FOURCC 编码器标识符。不同的 FOURCC 值对应不同的视频编码格式,以下是一些常见的 FOURCC 值及其对应的视频文件类型:
- XVID
文件类型: .avi
描述: Xvid MPEG-4 编码器,广泛用于 AVI 文件格式。 - MP4V
文件类型: .mp4
描述: MPEG-4 视频编码器,适用于生成 MP4 文件。推荐使用现代格式。 - MJPG
文件类型: .avi
描述: Motion JPEG 编码器,使用逐帧压缩的方式保存视频。每一帧都是一张 JPEG 图像。 - X264
文件类型: .mp4
描述: H.264 编码器,提供高压缩率和优良的画质,适合生成 MP4 文件。 - DIVX
文件类型: .avi
描述: DivX 编码器,早期常用于网络视频流媒体。 - H264
文件类型: .mp4
描述: H.264 编码器,与 X264 类似,但更多用于硬件加速编码。 - WMV1
文件类型: .wmv
描述: Windows Media Video 编码器,通常用于 WMV 文件。 - AVC1
文件类型: .mp4
描述: H.264/MPEG-4 AVC 编码器,常用于高清内容,适合 MP4 文件。 - I420
文件类型: .avi
描述: YUV 4:2:0 编码,通常用于未压缩的原始视频流。 - PIM1
文件类型: .mpeg
描述: MPEG-1 视频编码器,适用于早期的 MPEG 视频文件。
OK,基本符合预期哦~