如何在python中确定视频的开始时间和结束时间(自纪元以来的秒数)?

Posted

技术标签:

【中文标题】如何在python中确定视频的开始时间和结束时间(自纪元以来的秒数)?【英文标题】:How to determine start time and end time (seconds since epoch) of video in python? 【发布时间】:2016-11-28 05:34:49 【问题描述】:

我有一个项目需要能够知道视频文件(例如.mp4.mov.mxf 等)的启动时间(例如按下记录的时间)以及视频的启动时间文件自纪元以来以秒为单位结束。

到目前为止,我一直在做的是找到File Modified 时间并将其用作端点,然后减去持续时间以找到开始。这在某些情况下效果很好,但似乎有些摄像机不能以线性可预测的方式完全写入/修改文件,所以有时视频文件的开始/结束时间会重叠,而显然你不能在同一时间。

我是否可以在 python 中使用ffprobe(或替代方法)访问其他方法或元数据,以准确确定视频何时开始以及何时结束?

【问题讨论】:

根据:QuickTime File Format Specification,看来“文件创建”时间没有明确定义。 您能提供更多上下文吗?就像在哪个系统中运行?或者你使用什么工具?目前我唯一能想到的是,也许您可​​以查看系统日志或摄像头日志(如果可以访问的话)。 这目前在 Windows 上运行,但也需要能够在 macOS 上运行。系统/相机日志不可用。我们只有视频文件和其中存储的任何元数据可供使用。 就目前而言,这太宽泛了。每种文件类型以及文件系统中可用的元数据的行为都取决于:文件系统类型、它的安装方式、进行录制的程序、保存的格式等。解决这个问题的单一组合recorder-filesystem-format 可能是一个更好的开始。 也就是说,我认为用于记录的软件可能是这个难题中最重要的一块。你无法获得它一开始就没有保存的信息。 不过,或许你可以使用python来控制录制的工作方式,并自己保存信息。 【参考方案1】:

使用时间库应该可以解决您的问题。试试这个:

import time
timer = time.time()
print(timer)

否则,pygame 在时间和格式方面可能非常有用。它旨在用于开发游戏,但也具有精确和有效的时间功能。

import pygame, sys
pygame.init()
timer = pygame.time.Clock() " Call after video has begun playback "
timer.tick() " Call onced playback has ended "
video_time = timer.get_time() " Returns previous time amount in milleseconds. "

【讨论】:

【参考方案2】:

如果您在同一系统上运行代码,则可以使用 time 库来确定视频的开始时间和结束时间。

如果您想要从纪元开始的秒数差异,您可以使用time.time() 函数。

import time

starttime = time.time()

您可以使用 Tkinter 将其与 onclick 事件绑定

【讨论】:

【参考方案3】:

你最好的工具是:

ffprobe
mediainfo
exiftool

您可以在其中找到许多类型的日期戳,但我从未测试过它们的准确性。如果在这些工具和文件系统标记之间找不到正确的元数据,那么您需要在拍摄时进行更好的跟踪。我既是电影制作人又是程序员,我不太明白为什么需要纪元时间,但我知道在制作过程中需要更好的跟踪。

尝试使用带时钟的数字隔板,或使用某种数字记录器,您可以在记录期间控制时间戳的创建。

另外,正如其他人所提到的,这个问题缺乏重点。你想解决什么问题?我只能想到媒体源之间的同步,在这种情况下使用一些软件,例如复数眼睛。

【讨论】:

【参考方案4】:

快速提示是使用 python 中的system() 命令。

选项#1:

   $ ffmpeg -i file.flv 2>&1 | grep "Duration"

选项#2:

   $ mediainfo --Inform="General;%Duration%" [inputfile]

【讨论】:

以上是关于如何在python中确定视频的开始时间和结束时间(自纪元以来的秒数)?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 AMP 上分享具有特定开始和结束时间的 YouTube 视频?

Html 视频结束事件不适用于元素中的开始和结束时间声明

如何在python中找到事件的开始时间和结束时间?

如何从每 2 分钟存储的状态日志中确定事件的开始/结束时间

如何在 uiwebview iOS 中处理 YouTube 视频事件(开始、结束等)

如何按 ID 分组并查找日期中的空白以确定 Alteryx 中的开始和结束日期?