使用 ffmpeg-python 将视频分割成图像

Split video into images with ffmpeg-python

据我了解ffmpeg-python是Python中的主包,直接操作ffmpeg

现在我想拍摄一段视频并将其帧保存为一些 fps 的单独文件。

有很多命令行方法可以做到这一点,例如ffmpeg -i video.mp4 -vf fps=1 img/output%06d.pngdescribed here

但我想在 Python 完成。还有一些解决方案 [1] [2] 使用 Python 的 subprocess 来调用 ffmpeg CLI,但它对我来说看起来很脏。

有什么方法可以使用ffmpeg-python吗?

我建议您尝试 imageio module 并使用以下代码作为起点:

import imageio

reader = imageio.get_reader('imageio:cockatoo.mp4')

for frame_number, im in enumerate(reader):
    # im is numpy array
    if frame_number % 10 == 0:
        imageio.imwrite(f'frame_{frame_number}.jpg', im)

您也可以使用 openCV

参考代码:

import cv2

video_capture = cv2.VideoCapture("your_video_path")
video_capture.set(cv2.CAP_PROP_FPS, <your_desired_fps_here>)

saved_frame_name = 0

while video_capture.isOpened():
    frame_is_read, frame = video_capture.read()

    if frame_is_read:
        cv2.imwrite(f"frame{str(saved_frame_name)}.jpg", frame)
        saved_frame_name += 1

    else:
        print("Could not read the frame.")

以下对我有用:

ffmpeg
.input(url)
.filter('fps', fps='1/60')
.output('thumbs/test-%d.jpg', 
        start_number=0)
.overwrite_output()
.run(quiet=True)