【问题标题】:Get duration from multiple video files?从多个视频文件中获取持续时间?
【发布时间】:2019-04-08 05:28:47
【问题描述】:

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

我需要从多达数千个视频中提取数据。在 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")]))

更快的方法是什么?

【问题讨论】:

  • edit 提出您的问题,并说明您是如何使用FFprobe 的,您说它太慢了——是通过subprocess 来的吗?
  • 如果您将输出重定向到日志文件并避免控制台打印,如ffprobe Fastest way to read video packets 所示,它会更快一些,但您将希望使用>> output.log 而不是使用> output.log

标签: python windows ffmpeg ffprobe


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 感谢您的回答。我认为问题在于迭代多个文件并不是真正优化的方式,因为 ffprobe 每次都重新启动。我附上了简单的 gif,以便您了解速度。在 cmd 中使用 ffprobe 循环时,我得到了相同的结果。我几乎立即需要每个文件的结果。
    • 定义almost instantly?
    • 我需要处理多达数千个视频文件。在 Windows 中,当在资源管理器中选择它们并按属性>详细信息时,我可以手动查看许多文件的总持续时间。对于 1500 个 mp4 文件,计算和显示所有详细信息大约需要 20 秒。即使它不是即时的,它仍然比我在所有这些上使用 ffprobe 迭代时得到的要快得多。
    猜你喜欢
    • 1970-01-01
    • 2010-11-18
    • 2016-04-23
    • 2019-04-14
    • 2019-03-18
    • 2013-03-01
    • 1970-01-01
    • 2022-08-18
    • 2023-01-24
    相关资源
    最近更新 更多