使用 ffmpeg-python 将视频分割成图像
Split video into images with ffmpeg-python
据我了解ffmpeg-python
是Python中的主包,直接操作ffmpeg
。
现在我想拍摄一段视频并将其帧保存为一些 fps 的单独文件。
有很多命令行方法可以做到这一点,例如ffmpeg -i video.mp4 -vf fps=1 img/output%06d.png
described 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)
据我了解ffmpeg-python
是Python中的主包,直接操作ffmpeg
。
现在我想拍摄一段视频并将其帧保存为一些 fps 的单独文件。
有很多命令行方法可以做到这一点,例如ffmpeg -i video.mp4 -vf fps=1 img/output%06d.png
described 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)