用Python打造精彩动画与视频,7.3 使用OpenCV在视频生成中的应用

第七章:高级视频和动画技术

7.3 使用OpenCV在视频生成中的应用

在本节中,我们将探索如何使用OpenCV进行一些基本的视频生成和增强技术。这些技术包括视频帧的叠加、视频剪辑、视频滤波等,通过这些技术可以提升视频的表现力。

7.3.1 素材准备

在进行视频处理之前,我们需要准备一些素材文件。以下是素材的准备要求及其存放位置。

素材文件:

视频文件:

example_video.mp4.mp4

素材存放位置:

所有素材文件应放置在与Python脚本相同的目录中,以简化路径问题。假设您的Python脚本 run_manim.py 的路径为 E:\PycharmProjects\pythonProject3\run_manim.py,将所有素材文件放在 E:\PycharmProjects\pythonProject3\ 目录中。

示例目录结构:

E:\PycharmProjects\pythonProject3\

├── run_manim.py

└── example_video.mp4.mp4

确认文件路径:

为了确保文件路径正确,请确认素材文件的路径如下:

视频文件:

E:\PycharmProjects\pythonProject3\example_video.mp4.mp4

检查素材文件

运行以下代码,检查文件是否存在:

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| import os base_path = r'E:\PycharmProjects\pythonProject3' video_file = 'example_video.mp4.mp4' # 检查视频文件 video_path = os.path.join(base_path, video_file) if not os.path.exists(video_path): print(f"文件路径不存在: {video_path}") else: print(f"文件路径存在: {video_path}") |

|---|---|
| |
| | |

确保所有素材文件已准备好,并且路径正确。接下来学习使用OpenCV在视频生成中的应用。

7.3.2 视频帧的叠加

视频帧的叠加可以将两个视频的帧叠加在一起,创建有趣的视觉效果。

示例代码:视频帧的叠加

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| import cv2 import numpy as np # 设置文件路径 video_path = r'E:\PycharmProjects\pythonProject3\example_video.mp4.mp4' # 初始化视频捕捉 cap = cv2.VideoCapture(video_path) fourcc = cv2.VideoWriter_fourcc(*'mp4v') out = cv2.VideoWriter('overlay_video.mp4', fourcc, 20.0, (int(cap.get(3)), int(cap.get(4)))) while cap.isOpened(): ret, frame = cap.read() if not ret: break # 创建一个带有随机噪声的帧 noise = np.random.randint(0, 256, frame.shape, dtype=np.uint8) # 将原始帧和噪声帧叠加 overlay_frame = cv2.addWeighted(frame, 0.7, noise, 0.3, 0) # 写入输出视频 out.write(overlay_frame) cv2.imshow('Overlay Video', overlay_frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() out.release() cv2.destroyAllWindows() |

|---|---|
| |
| | |

代码解释:

cv2.VideoCapture(video_path):初始化视频捕捉对象,读取视频文件 example_video.mp4.mp4。

cv2.addWeighted(frame, 0.7, noise, 0.3, 0):将原始帧和噪声帧按权重叠加。

out.write(overlay_frame):将叠加后的帧写入输出视频文件 overlay_video.mp4。

cv2.imshow('Overlay Video', overlay_frame):显示处理后的帧。

cap.release() 和 out.release():释放视频捕捉和写入对象。

cv2.destroyAllWindows():关闭所有打开的窗口。

7.3.3 视频剪辑

视频剪辑可以提取视频的一部分,用于创建短视频或高光片段。

示例代码:视频剪辑

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| import cv2 # 设置文件路径 video_path = r'E:\PycharmProjects\pythonProject3\example_video.mp4.mp4' # 初始化视频捕捉 cap = cv2.VideoCapture(video_path) fourcc = cv2.VideoWriter_fourcc(*'mp4v') out = cv2.VideoWriter('clipped_video.mp4', fourcc, 20.0, (int(cap.get(3)), int(cap.get(4)))) # 设置剪辑的开始和结束时间(单位:秒) start_time = 5 end_time = 10 # 获取视频的帧率 fps = cap.get(cv2.CAP_PROP_FPS) # 计算开始和结束帧 start_frame = int(start_time * fps) end_frame = int(end_time * fps) cap.set(cv2.CAP_PROP_POS_FRAMES, start_frame) while cap.isOpened(): ret, frame = cap.read() current_frame = cap.get(cv2.CAP_PROP_POS_FRAMES) if not ret or current_frame > end_frame: break # 写入输出视频 out.write(frame) cv2.imshow('Clipped Video', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() out.release() cv2.destroyAllWindows() |

代码解释:

cv2.VideoCapture(video_path):初始化视频捕捉对象,读取视频文件 example_video.mp4.mp4。

cap.set(cv2.CAP_PROP_POS_FRAMES, start_frame):设置视频捕捉位置为开始帧。

out.write(frame):将当前帧写入输出视频文件 clipped_video.mp4。

cv2.imshow('Clipped Video', frame):显示当前帧。

cap.release() 和 out.release():释放视频捕捉和写入对象。

cv2.destroyAllWindows():关闭所有打开的窗口。

7.3.4 视频滤波

视频滤波可以应用各种滤波器来增强视频的视觉效果,例如模糊、锐化等。

示例代码:视频模糊滤波

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| import cv2 # 设置文件路径 video_path = r'E:\PycharmProjects\pythonProject3\example_video.mp4.mp4' # 初始化视频捕捉 cap = cv2.VideoCapture(video_path) fourcc = cv2.VideoWriter_fourcc(*'mp4v') out = cv2.VideoWriter('blurred_video.mp4', fourcc, 20.0, (int(cap.get(3)), int(cap.get(4)))) while cap.isOpened(): ret, frame = cap.read() if not ret: break # 应用模糊滤波 blurred_frame = cv2.GaussianBlur(frame, (15, 15), 0) # 写入输出视频 out.write(blurred_frame) cv2.imshow('Blurred Video', blurred_frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() out.release() cv2.destroyAllWindows() |

|---|---|
| |
| | |

代码解释:

cv2.VideoCapture(video_path):初始化视频捕捉对象,读取视频文件 example_video.mp4.mp4。

cv2.GaussianBlur(frame, (15, 15), 0):应用高斯模糊滤波器。

out.write(blurred_frame):将模糊后的帧写入输出视频文件 blurred_video.mp4。

cv2.imshow('Blurred Video', blurred_frame):显示模糊后的帧。

cap.release() 和 out.release():释放视频捕捉和写入对象。

cv2.destroyAllWindows():关闭所有打开的窗口。

小结

通过上述示例代码,我们展示了如何使用OpenCV进行一些基本的视频生成和增强技术,包括视频帧的叠加、视频剪辑和视频滤波。这些技术可以帮助您提升视频的表现力,使其更加引人注目。在接下来的章节中,我们将进一步探讨Python在高级视频处理和动画制作中的应用,展示如何将这些技巧融入实际项目中。

相关推荐
kruptos2 小时前
分布式系统怎么“选主“?Raft 共识一次讲清
开发语言·分布式·php·共识算法
吴声子夜歌2 小时前
ApacheCommons——commons-cli(命令行参数解析)
java·开发语言·apache
benchmark_cc3 小时前
REST API 和 Python SDK 应该怎么选?量化交易数据接口选型实战
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
王的宝库3 小时前
Go 项目结构:从单文件到标准工程布局
开发语言·后端·golang
Tairitsu_H3 小时前
[C++] 深入理解红黑树:封装set与map
开发语言·c++·set·map·红黑树·模拟实现
泡海椒3 小时前
JQuick-Curl 性能分析:并发场景下的性能表现与调优,第三方接口调用不只要快写也要稳跑
java·开发语言·okhttp
小智老师PMP3 小时前
2026深度解析|PMP第八版与NPDP核心侧重点本质区别(管理类证书怎么选)
开发语言·分布式·算法·职场和发展·产品经理
2601_962382434 小时前
python快乐编程网络爬虫课后答案
python·网络爬虫·学习工具·课后答案·刷题app
鹏哥带你干乡墅5 小时前
优选乡墅赋能培训平台如何帮助提升乡村建设?
大数据·人工智能·python
江畔柳前堤5 小时前
前台·中台·后台:2026年AI原生时代的架构全景图
开发语言·人工智能·算法·机器学习·架构·scala·ai-native