本章主要介绍 Python + ffmpeg 实现视频播放。
以下是一个使用 ffmpeg 和 pygame 来实现基础视频播放。
pygame 用于处理音频和视频的渲染,ffmpeg 通过其 Python 绑定(如 imageio-ffmpeg 或 ffmpeg-python)处理视频解码。
安装依赖
首先,确保安装了必要的库和工具:
pip install pygame imageio[ffmpeg]
如果需要更精细地控制 FFmpeg,可以安装 ffmpeg-python:
pip install ffmpeg-python
基础播放器实现
以下是一个完整地播放器代码示例:
import pygame
import imageio
import sys
def video_player(video_path):
# 初始化 pygame
pygame.init()
# 使用 imageio 打开视频
video = imageio.get_reader(video_path)
metadata = video.get_meta_data()
fps = metadata.get("fps", 30)
width, height = metadata["size"]
# 创建显示窗口
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("Python + FFmpeg Video Player")
# 初始化时钟
clock = pygame.time.Clock()
try:
for frame in video:
# 检查事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# 转换图像为 pygame 格式
frame_surface = pygame.surfarray.make_surface(frame.swapaxes(0, 1))
screen.blit(frame_surface, (0, 0))
pygame.display.flip()
# 控制帧率
clock.tick(fps)
except Exception as e:
print(f"Error occurred: {e}")
finally:
video.close()
pygame.quit()
if __name__ == "__main__":
video_path = "01.mp4"
video_player(video_path)
代码说明
imageio.get_render
:用于读取视频帧并提取元数据。pygame.surfarray.make_surface
:将视频帧转换为pygame.Surface
对象,以便在窗口中显示。- 帧率控制:使用
pygame.time.Clock
确保帧率与视频一致。 - 事件处理:支持关闭窗口的操作。
其他扩展:
- 音频播放:通过
pygame.mixer
或直接使用 FFmpeg 解码和播放音频。 - 视频播放:支持暂停、快进、快退等操作。
- 字母支持:结合
pysubs2
等库添加字幕渲染。