如何在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 视频?