我有一个包含多个视频流的 mov 文件,我正在尝试使用 ffmpeg python 绑定来读取每个流并保存其所有帧。
为此,我编写了类似于此的代码:
import numpy as np
from PIL import Image
import ffmpeg
# Explore streams using probe
probe = ffmpeg.probe(file)
video_streams = [stream for stream in probe['streams'] if stream['codec_type'] == 'video']
for stream in video_streams:
out, _ = (
ffmpeg
.input(file,stream_index=int(stream["index"]))
.output('pipe:', format='rawvideo', pix_fmt='rgb24')
.run(capture_stdout=True)
)
video = (
np
.frombuffer(out, np.uint8)
.reshape([-1, height, width, 3])
)
stream_dir = video_streams_dir / int(stream["index"])
stream_dir.mkdir(exist_ok=True)
for i in range(video.shape[0]):
Image.fromarray(video[i,...]).save(stream_dir / f"{video_name}__{i:04d}.jpeg")
但是
stream_index=int(stream["index"])
似乎是一个无效参数,所以我的问题是,如何为输入节点指定输入流?
注意:它可以在没有该参数的情况下使用第一个(我相信)视频流。
更新:找到这个线程,看来 ffmpeg 确实允许它,仍然没有尝试基于它实现我自己的解决方案。
无法帮助您
python-ffmpeg
,但您可以在ffmpegio
中尝试我的实现。您可以查看此讨论主题:
https://github.com/python-ffmpegio/python-ffmpegio/discussions/17
如果您需要帮助,请随时在那里开始一个新线程。