从多个视频文件中获取持续时间?

Get duration from multiple video files?

我想从指定目录中的每个视频文件中提取视频时长元数据,然后查看总时长。

我需要从多达数千个视频中提取数据。在 Windows 中,当在资源管理器中选择文件并进入详细信息时,我可以手动查看许多文件的总持续时间。对于 1500 个 mp4 文件,计算和查看总时间大约需要 20 秒。它比我目前用 FFprobe 迭代时得到的要快得多。

How fast I am currently getting the result with FFprobe.

for filename in dirFiles:
   print(subprocess.check_output(['ffprobe', '-i', filename, '-show_entries','format=duration', '-sexagesimal' ,'-v', 'quiet', '-of', 'csv=%s' % ("p=0")]))

执行此操作的更快方法是什么?

没有 "best" 方法,只有适合您的用例的最佳方法。 os.stat 没有它,因为视频持续时间不是任何 posix 文件系统的一部分,(文件系统不关心文件的内容,什么是文本文件的持续时间?什么是可执行文件的分辨率?)如果您不喜欢 ffprobe,请尝试使用 mediainfo 或 mp4box,或任何其他可以读取媒体文件的工具。

我用 mutagen 模块解决了这个问题,因为它处理文件的速度非常快。

mp4 = mutagen.mp4.MP4(filename) duration+=mp4.info.length