gpt4 book ai didi

python - python中的ffmpeg - 提取元数据

转载 作者:行者123 更新时间:2023-12-04 23:01:17 29 4
gpt4 key购买 nike

我使用 ffmpeg for Python 从视频文件中提取元数据。我认为官方文档可以在这里找到:https://kkroening.github.io/ffmpeg-python/
为了提取元数据(持续时间、分辨率、每秒帧数等),我使用提供的函数“ffmpeg.probe”。可悲的是,当在大量视频文件上运行它时,它的效率相当低,因为它似乎(显然?)每次都将整个文件加载到内存中以读取少量数据。
如果这不是它所做的,也许有人可以解释相当广泛的运行时间的原因可能是什么。
否则,有没有办法使用 ffmpeg 或其他库以更有效的方式检索元数据?
非常感谢任何反馈或帮助。
编辑:为清楚起见,我在此处添加了代码:

pool = mp.Pool()
videos = []
for file in os.listdir(directory):
pool.apply_async(ffmpeg.probe, args=[os.path.join(directory, file)], callback=videos.append)
pool.close()
pool.join()
缺少路径的导入和定义,但应该足以了解发生了什么。

最佳答案

running it on a large amount of video files


如果减速来自子进程的产生(而不是来自实际的 I/O),这就是多线程/多处理可能会有所帮助的地方。这可能无济于事,因为与几乎所有其他内容相比,文件 I/O 通常需要时间。

load the whole file into memory each time to read just a small amount of data


这是不正确的断言 IMO。它应该只读取相关的 header /数据包来检索元数据。您支付的子流程税可能比其他任何事情都多。

a way to retrieve meta data


(1) 除了上面提到的@Peter Hassaballeh 之外,ffprobe 还可以选择限制查找的内容。如果您只需要获取容器(格式)级别的信息或只需要获取特定流的信息,您可以准确地指定您需要的内容(在一定程度上)。这可以节省一些时间。
(2) 您可以尝试使用 MediaInfo(另一个免费工具,如 ffprobe),您也应该可以从 Python 调用它。
(3) 如果您正在处理特定的文件格式,最快的方法是在 Pyton 中自己解码,只读取对您重要的字节。根据当前的瓶颈,它可能不会有那么大的改进。

关于python - python中的ffmpeg - 提取元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71236932/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com